在使用 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);
  ...