我正在编写一个程序,它在一个目录中启动一个随机文件。该文件可以是任何时间,但主要是视频或图像文件。每次启动一个文件时,我都想关闭之前打开的文件。代码是:
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重用了进程,这就是为什么它返回空的原因,但我需要重写这个行为。请帮帮忙,盖伊。
发布于 2010-08-11 15:59:15
编辑:多亏了leppie的评论,我想我知道答案了:我猜你是在“开始”一些类似于图像的东西,它是重用现有的进程来打开文档,而不是创建一个新的进程。
我用这个简单的测试应用重现了这个:
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,而不是创建一个新进程。
发布于 2013-06-19 09:29:57
要解决此问题,必须将UseShellExecute
设置为false以绕过外壳。
而不是
Process.Start("filename", "args")`
使用
Process.Start(new ProcessStartInfo() {
Filename = "filename",
Arguments = "args",
UseShellExecute = false
}
https://stackoverflow.com/questions/3456383
复制相似问题