2011-03-12 37 views
2

后的“安全删除”闪存盘我有一个下面的应用我想从闪存驱动器运行,说F:\ APP.EXE无法调用的Process.Start和终止

static void Main(string[] args) 
{ 
    Process.Start(@"C:\AnotherApp.exe"); 
} 

然而,App.exe终止后,不可能“安全删除”驱动器F:直到AnotherApp.exe也终止。当使用Sysinternals进程监视器,进程查看进程树时,AnotherApp.exe仍然是App.exe(终止)的子代。

有没有办法从闪存驱动器上的应用程序启动进程,但不会阻止其安全删除?

回答

2

Process.Start总是产生一个进程作为启动应用程序的子进程。

即使你终止父母,孩子仍然是那个孩子的孤儿,我认为它仍然拥有父母的手柄。

编辑:

OK,我知道了。
问题是子进程是以F:\作为其当前目录开始的。
您可以使用CreatePocess()P/Invoke创建进程,并设置一个不同的起始目录(我已经测试过它并且工作正常)。

这里举例:

http://pastebin.com/QsMqejS5

+0

最后我得到的问题,检查我的编辑:) – digEmAll 2011-03-12 13:07:24

+0

+1。注意:默认情况下,Process使用ShellExecuteEx。将ProcessStartInfo参数的参数UseShellExecute设置为false,并在内部使用'CreateProcess'。这将消除使用P/Invoke的需要。 – Abel 2011-03-12 13:17:00

+0

@Abel:我已经测试过这种方法,但起始目录不会改变,所以你不能分离USB ... – digEmAll 2011-03-12 13:21:51