Мне нужно предложить пользователю закрыть оснастку services.msc при удалении программы. Как мне это сделать?
Как определить, загружена ли оснастка services.msc в консоль mmc?
comment
Какова ваша цель с этим?
- person Tom Blodget   schedule 08.06.2013
comment
См. раздел stackoverflow. ком/вопросы/5321825/
- person vkrzv   schedule 09.06.2013
comment
Иногда мой сервис не может быть зарегистрирован из-за запущенного апплета сервисов.
- person vkrzv   schedule 09.06.2013
comment
Это интересная проблема. У меня нет готового ответа. Существует два возможных неисключительных подхода: 1) Помогите пользователю, выполняющему удаление, понять, что удаление не должно продолжаться/не будет полностью завершено, пока все процессы не выпустят дескрипторы для службы, или 2) Помогите пользователю, выполняющему установку, понять, что установка не может быть продолжена. / не удастся, если все процессы не выпустят дескрипторы службы, запланированной для удаления. Обнаружение (1) может быть сложнее, но, как вы предлагаете, его можно сузить до простого обнаружения оснастки служб. Обнаружение (2) по-прежнему потребует пользовательского действия.
- person Tom Blodget   schedule 09.06.2013
Ответы (1)
Для этого вам нужно написать настраиваемое действие. Вы можете использовать Process, чтобы проверить, загружен ли services.msc в mmc или нет.
[CustomAction]
public static ActionResult CustomAction1(Session session)
{
foreach (Process getProcess in Process.GetProcesses())
{
if (getProcess.ProcessName.Contains("mmc"))
{
if (getProcess.MainWindowTitle == "Services")
{
session["SERVICES_MSC"] = "Running";
break;
}
}
}
return ActionResult.Success;
}
Вызывает настраиваемое действие при удалении и останавливает удаление на основе свойства SERVICES_MSC.
<Binary Id="Check_Services" SourceFile="..\TestProject\bin\Release\TestProject.CA.dll" />
<CustomAction Id="CHECK_SERVICES" BinaryKey="Check_Services" DllEntry="CustomAction1" Return="check" />
<CustomAction Id="STOP_INSTALLATION" Error="Services.msc is running.Please close that Window before uninstall the setup." />
Внутри последовательности Install Execute вызовите настраиваемые действия.
<Custom Action="CHECK_SERVICES" After="InstallValidate">REMOVE ~= "ALL"</Custom>
<Custom Action="STOP_INSTALLATION" After="CHECK_SERVICES">(REMOVE ~= "ALL") AND SERVICES_MSC</Custom>
person
Vinoth
schedule
07.06.2013
Спасибо. Но если вы сначала запустите mmc, а затем загрузите апплет сервисов с помощью File->Add/Remove Snap-In и оставите фокус на корне консоли, то заголовок окна не будет содержать Services. Также название апплета может быть переведено на другой язык.
- person vkrzv; 07.06.2013