Предложить пользователю закрыть приложения при удалении — WIX

У меня есть настраиваемое действие «xxxx», которое удаляет каталог, выполняя rmdir через командную строку.
ExeCommand = «[SystemFolder] cmd.exe / C rmdir / Q / S "[DIR]"»и выполнить =» отложено «

Он добавлен в InstallExecuteSequence, как показано ниже

Custom Action="xxxx" After="InstallInitialize"(NOT UPGRADINGPRODUCTCODE) AND REMOVE
Custom

Если каталог открывается каким-либо другим приложением, таким как командная строка, он выдает ошибку.

Я прочитал много похожих вопросов. Но не мог понять

1) предложить пользователю закрыть приложения — читаю добавление

UI
DialogRef Id="FilesInUse"DialogRef Id="MsiRMFilesInUse"/UI

и используя настраиваемое действие Before="InstallValidate" показывает подсказку закрыть приложения.

2) Как запустить настраиваемое действие после остановки служб и предложить пользователю закрыть приложения?
Он должен работать в отложенном режиме.

3) Если я хочу в Execute = deferred, то я не могу использовать InstallValidate. Поэтому я не могу использовать FilesInUse.

4) Есть ли другой хороший подход? Я не хочу ссылаться на DLL, потому что я хочу, чтобы установщик удалил весь каталог при удалении.

2

Решение

Большой вопрос — зачем вам удалять эту папку, потому что обычно это не нужно. Это означает, что он должен остаться позади, но это всего лишь предположение, поэтому я бы сказал, что с этой проблемой нужно разобраться — почему это осталось позади. Ваш вопрос о том, почему ваше решение не работает. Основная проблема заключается в том, что InstallValidate выведет диалоговое окно FilesInUse, если Windows решит, что он ему нужен, а Windows не нужен — вы делаете это из-за своих пользовательских действий — вот почему ссылки на интерфейс FilesInUse не помогают.

Если вы хотите удалить файлы или папки, элемент WiX RemoveFile является обычным способом, и это происходит в нужной точке удаления, где все остальное было удалено:

Wix RemoveFile и RemoveFolder для удаления остатков

Если вы хотите сказать, чтобы приложение закрылось, есть приложение WiX Util CloseApplication.

Если вы действительно хотите решить проблему с папкой с помощью своего кода и приглашения FilesInUse (а не решить основную проблему этой папки), тогда пользовательское действие C ++, подобное этому, покажет диалоговое окно FilesInUse, непосредственно перед тем, как InstallValidate должен работать, вам потребуется некоторые включают в себя msi.h, msiquery.h:

UINT __stdcall ShowFilesInUse (MSIHANDLE hInstall)
{
PMSIHANDLE hRec = MsiCreateRecord(4);
MsiRecordSetString(hRec, 1, TEXT(" "));
MsiRecordSetString(hRec, 2, TEXT("Please use Task Manager to Terminate these programs:"));
MsiRecordSetString(hRec, 3, TEXT("something else"));
UINT res = 0;
do
{
res = MsiProcessMessage(hInstall, INSTALLMESSAGE_FILESINUSE, hRec);
}
while (res == IDRETRY);
if (IDOK==res) // 1 is the Continue button in VS
return 0;
if (IDCANCEL ==res) // The Exit button in VS
return ERROR_INSTALL_USEREXIT;
return 0;
}

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]