2011-11-23 38 views
0
protected override void OnBeforeInstall(IDictionary savedState) 
{ 
    base.OnBeforeInstall(savedState); 
    DialogResult result = DialogResult.None; 
    if (isExcelIsRunning()) 
    { 
     result = MessageBox.Show("Excel is still running. Please save your work and close Excel, and then click \"Retry\" button to continue with installation.", "", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning); 
    } 
    while (result == DialogResult.Retry) 
    { 
     if (!isExcelIsRunning()) 
     { 
      break; 
     } 
    } 
} 


//check if excel is currently running 
private bool isExcelIsRunning() 
{ 
    bool flag = false; 
    Process[] xlProc = Process.GetProcessesByName("excel"); 
    if (xlProc != null) 
     flag = true; 
    return flag; 
} 

以上是我即將用於安裝程序類的代碼。安裝過程中警告用戶有關運行過程

我想在這裏實現的是,我需要安裝程序來檢查安裝過程中當前是否正在運行Excel。如果它正在運行,那麼在安裝開始時應該會彈出消息以提醒用戶關閉Excel,安裝程序應該暫停,直到在進程列表中找不到Excel實例。

回到代碼,我不認爲while塊是非常正確的,因爲如果在Excel仍在運行的同時用戶單擊「重試」按鈕後可能會導致無限循環。

那麼更好的方法是什麼?我會很感激,如果有人在這裏可以看看上面的代碼,看看我可以改進的地方。

非常感謝。

+0

爲什麼excel不能正常運行? –

+0

因爲這是一個Excel加載項安裝程序,我認爲如果在安裝加載項時我們可以擁有一個乾淨的環境會很好。 – woodykiddy

+0

這很有道理。雖然這裏的問題是你應該用excel運行測試。畢竟,在您進行預安裝檢查後,沒有任何東西阻止用戶再次啓動它。 –

回答

1

我覺得你的代碼將是這樣的:

while(isExcelRunning()) 
{ 
    var result = MessageBox.Show("Excel is still running. Please save your work and close Excel, and then click \"Retry\" button to continue with installation.", "", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning); 
    if (result != DialogResult.Retry) 
    { 
     //Handle Cancel 
     break; 
    } 
} 

這將持續顯示在一個循環的警報,無論是到Excel中退出,否則按取消,在這你可以做任何你需要做;那麼我們退出循環(或者完全退出該方法)。

這裏的關鍵是重複顯示警報,直到Excel消失或他們選擇取消。如果你需要在循環之後根據響應做一些代碼;可能是這樣的:

var userHasCancelled = false; 
while(!userHasCancelled && isExcelRunning()) 
{ 
    var result = MessageBox.Show("Excel is still running. Please save your work and close Excel, and then click \"Retry\" button to continue with installation.", "", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning); 
    if (result != DialogResult.Retry) 
    { 
     userHasCancelled = true; 
    } 
} 
if (userHasCancelled) 
{ 
    //User cancelled... 
} 
else 
{ 
    //Continue. 
} 
+0

非常感謝vcsjones。我認爲你的回答非常有幫助。 – woodykiddy

+0

@vcjones哦,只是一個快速的後續問題,說如果我想退出整個安裝,如果用戶選擇「取消」。我應該在這裏做什麼?我可以將值「取消」傳遞給安裝程序嗎? – woodykiddy

+0

@woodykiddy我對製作安裝程序不夠了解;但你應該打開另一個問題,別人可能知道。 – vcsjones

相關問題