在使用 WIX 实施的 MSI 应用程序卸载期间输入
Take input during MSI application uninstallation implemented using WIX
我们有一个使用 WIX 开发的应用程序。当用户尝试在 Windows 上卸载应用程序时,我们需要提示用户输入验证码。如果用户提供了正确的代码,则卸载将继续进行,否则卸载可能会中止。如何提示用户提供代码?
目前,我们在卸载过程中有一个自定义步骤,我们可以使用 WTSSendMessage 向他显示一些消息。如果我尝试使用 DialogBox 接收用户的输入,它永远不会弹出。但是,同一个 DialogBox 可以与其他 Windows 应用程序一起使用,但在卸载阶段不起作用。如何在卸载过程中提示用户输入密码?
问题是在 DialogBox 调用中找出正确的 HINSTANCE。我使用的是 GetModuleHandle(NULL) 或 NULL。它不起作用,因为它不是可执行文件,而是 DLL。当我为 DLL 使用正确的 HINSTANCE 时,它开始工作。这是找出 DLL 的 HINSTANCE 的代码片段:
HMODULE GetCurrentModule()
{
HMODULE hModule = NULL;
GetModuleHandleEx(
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
(LPCTSTR)GetCurrentModule,
&hModule);
return hModule;
}
bool callingFunction()
{
INT32 retVal = DialogBox(GetCurrentModule(),
MAKEINTRESOURCE(IDD_UNINST_CODE),
NULL, //(HWND)hInstall,
(DLGPROC)MsgProcessingProc);
...
我们有一个使用 WIX 开发的应用程序。当用户尝试在 Windows 上卸载应用程序时,我们需要提示用户输入验证码。如果用户提供了正确的代码,则卸载将继续进行,否则卸载可能会中止。如何提示用户提供代码?
目前,我们在卸载过程中有一个自定义步骤,我们可以使用 WTSSendMessage 向他显示一些消息。如果我尝试使用 DialogBox 接收用户的输入,它永远不会弹出。但是,同一个 DialogBox 可以与其他 Windows 应用程序一起使用,但在卸载阶段不起作用。如何在卸载过程中提示用户输入密码?
问题是在 DialogBox 调用中找出正确的 HINSTANCE。我使用的是 GetModuleHandle(NULL) 或 NULL。它不起作用,因为它不是可执行文件,而是 DLL。当我为 DLL 使用正确的 HINSTANCE 时,它开始工作。这是找出 DLL 的 HINSTANCE 的代码片段:
HMODULE GetCurrentModule()
{
HMODULE hModule = NULL;
GetModuleHandleEx(
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
(LPCTSTR)GetCurrentModule,
&hModule);
return hModule;
}
bool callingFunction()
{
INT32 retVal = DialogBox(GetCurrentModule(),
MAKEINTRESOURCE(IDD_UNINST_CODE),
NULL, //(HWND)hInstall,
(DLGPROC)MsgProcessingProc);
...