首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Process.Start返回null

Process.Start返回null
EN

Stack Overflow用户
提问于 2010-08-11 15:55:51
回答 2查看 9.8K关注 0票数 19

我正在编写一个程序,它在一个目录中启动一个随机文件。该文件可以是任何时间,但主要是视频或图像文件。每次启动一个文件时,我都想关闭之前打开的文件。代码是:

代码语言:javascript
复制
    string FolderSelected = "";
    string FileName = "";
    Process proc;

    List<string> FilesDisplayed = new List<string>();

    public Form1()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        if (FolderSelected == string.Empty)
            FolderSelected = Properties.Settings.Default.FilesDefaultFolder;

        if (proc != null)
        {
            proc.CloseMainWindow();
            proc.Close();
        }
        FileName = FetchRandomFile();
        proc = Process.Start(FileName);


    }

问题是,我总是得到proc = null (文件已正确启动),并且我无法获取之前打开的进程来关闭它。我知道.NET重用了进程,这就是为什么它返回空的原因,但我需要重写这个行为。请帮帮忙,盖伊。

EN

回答 2

Stack Overflow用户

发布于 2010-08-11 15:59:15

编辑:多亏了leppie的评论,我想我知道答案了:我猜你是在“开始”一些类似于图像的东西,它是重用现有的进程来打开文档,而不是创建一个新的进程。

我用这个简单的测试应用重现了这个:

代码语言:javascript
复制
using System;
using System.Diagnostics;

public class Test
{
    static void Main()
    {
        Process proc = Process.Start("image.tif");
        Console.WriteLine(proc == null);
    }
}

这打印出"true“,因为它使用dllhost.exe来托管Windows Image Viewer,而不是创建一个新进程。

票数 15
EN

Stack Overflow用户

发布于 2013-06-19 09:29:57

要解决此问题,必须将UseShellExecute设置为false以绕过外壳。

而不是

代码语言:javascript
复制
Process.Start("filename", "args")`

使用

代码语言:javascript
复制
Process.Start(new ProcessStartInfo() {
    Filename = "filename",
    Arguments = "args",
    UseShellExecute = false
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3456383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档