2011-03-12 39 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