2011-11-23 62 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