2013-05-07 70 views
1

我有一段代碼顯示文件的屬性窗口,等待屬性窗口對話框之前繼續腳本

ProcessStartInfo psi = new ProcessStartInfo(); 
psi.FileName = @"C:\Users\nyongrand\Desktop\Internet Download Manager.lnk"; 
psi.Verb = "properties"; 
Process process = Process.Start(psi); 
process.WaitForExit(); //This give me exception, Object reference not set to an instance of an object. 

我要的是等到窗口屬性被關閉,因爲如果我的代碼關閉屬性窗口也會關閉,我需要一個解決方案,我的代碼可以等待屬性窗口關閉,或者我的代碼可以退出而不關閉屬性窗口。

回答

1

您遇到的異常意味着processnull,當您嘗試調用其成員方法WaitForExit時。所以你應該問的問題是爲什麼。

the documentation開始,用於Process.Start函數的重載,該函數用於查看實際返回的值。果然,它返回一個Process對象,但只能在特定條件下:

返回值
類型:System.Diagnostics.Process
與該進程資源相關聯的新Process組件,或null如果沒有流程資源(例如,如果現有過程被重用)。

,並從「備註」部分:

注:如果可執行文件開始的地址是一個URL,該進程沒有啓動,並返回null

因此,如果現有過程被重新使用,Process.Start方法將返回null。而且您不能撥打null

+0

好的,我在閱讀文檔時錯過了那一個。寫得很好。 – Adrian 2013-05-08 00:04:01

0

嘗試

Process process = new Process(); 

if(process.Start(psi)) 
{ 
    process.WaitForExit(); 
} 
else 
{ 
    //Do something here to handle your process failing to start 
} 

你面對你的代碼的問題是,Process.Start()返回一個布爾更換

Process process = Process.Start(psi); 

。它不是Process對象的工廠。

相關問題