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 все еще работает.
Так что было бы лучше? Будет ли кто-нибудь здесь взглянуть на приведенный выше код и посмотреть, где я могу улучшить?