【问题标题】:Take input during MSI application uninstallation implemented using WIX在使用 WIX 实现的 MSI 应用程序卸载期间获取输入
【发布时间】:2021-04-27 11:21:46
【问题描述】:

我们有一个使用 WIX 开发的应用程序。当用户尝试在 Windows 上卸载应用程序时,我们需要提示用户输入验证码。如果用户提供正确的代码,则卸载将继续,否则卸载可能会中止。如何提示用户提供代码?

目前,我们在卸载期间有一个自定义步骤,我们可以使用 WTSSendMessage 向他显示一些消息。如果我尝试使用 DialogBox 接收用户的输入,它永远不会弹出。但是,相同的 DialogBox 可与其他 Windows 应用程序一起使用,但在卸载阶段不起作用。卸载时如何提示用户输入代码?

【问题讨论】:

  • MSI 是一种开放格式 - 在大多数情况下 - 并且为此禁用自定义操作相对容易。我们能否询问您需要从这个程序中获得哪些数据来查看是否有替代方案?有一些方法可以从添加/删除 GUI 中隐藏已安装的程序(但通常不是从命令行卸载方法)。
  • @SteinÅsmul 我正在寻找简单的文本框输入字段来接收密码。

标签: windows-installer uninstallation


【解决方案1】:

问题是在 DialogBox 调用中找出正确的 HINSTANCE。我使用的是 GetModuleHandle(NULL) 或 NULL。它不起作用,因为它不是可执行文件,而是 DLL。当我为 DLL 使用正确的 HINSTANCE 时,它开始工作。这是查找 DLL 的 HINSTANCE 的代码 sn-p:

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);
  ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2016-11-09
    • 2010-10-17
    • 1970-01-01
    • 2019-01-04
    • 2019-05-18
    相关资源
    最近更新 更多