【发布时间】:2018-08-17 10:34:21
【问题描述】:
我是 WiX 安装程序的新手。当进度条运行时,我需要在 WIX 安装程序中隐藏或禁用取消按钮。
我已经用谷歌搜索但没有找到一些有用的链接来隐藏取消按钮。我发现了这个:Hiding the Cancel Button During an Installation,但仍然不知道如何使用自定义操作。有没有人可以给我一些指导来实现这一点?
我做了以下事情来隐藏取消按钮,但它不起作用。 首先,我根据上面提到的链接用 C++ 编写了一个自定义操作。让我展示一下我为自定义操作做了什么。
打开 Visual Studio -> 创建新项目 -> 选择 C++ 中的自定义操作并选择类型 DLL。
它将使用 cpp 文件创建一个新项目。我将 cpp 文件命名为自定义操作并编写以下代码:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <Shellapi.h>
#include <msi.h>
#include <Msiquery.h>
UINT __stdcall HideCancelButton(MSIHANDLE hInstall)
{
PMSIHANDLE hRecord = MsiCreateRecord(2);
if (!hRecord)
return ERROR_INSTALL_FAILURE;
if (ERROR_SUCCESS != MsiRecordSetInteger(hRecord, 1, 2)
|| ERROR_SUCCESS != MsiRecordSetInteger(hRecord, 2, 0))
return ERROR_INSTALL_FAILURE;
MsiProcessMessage(hInstall, INSTALLMESSAGE_COMMONDATA, hRecord);
return ERROR_SUCCESS;
}
// DllMain - Initialize and cleanup WiX custom action utils.
extern "C" BOOL WINAPI DllMain(
__in HINSTANCE hInst,
__in ULONG ulReason,
__in LPVOID
)
{
switch(ulReason)
{
case DLL_PROCESS_ATTACH:
WcaGlobalInitialize(hInst);
break;
case DLL_PROCESS_DETACH:
WcaGlobalFinalize();
break;
}
return TRUE;
}
这是.def文件代码:
LIBRARY "HideCancelButton"
EXPORTS
HideCancelButton
现在我构建项目并创建了 HideCancelButton.dll 文件。
现在来看我的 WIX 项目。 添加自定义操作:
<Binary Id="HideCancelButtonDll" SourceFile="C:\Users\umer\Desktop\HideCancelButton.dll"/>
<CustomAction Id="CAhidecancel" BinaryKey="HideCancelButtonDll" Execute="immediate" Impersonate="no" DllEntry="HideCancelButton" Return="check"/>
在安装执行序列中添加以下行
<Custom Action='CAhidecancel' Before='CreateSSISCatalog'></Custom>
这就是我所做的一切,但它不起作用。我检查了日志,它显示返回值为 1。但仍然显示取消按钮。要检查函数是否正在调用,我在安装程序上放置了 sleep(10000) 并显示状态,它按预期工作,但显示取消按钮。
【问题讨论】:
标签: c++ wix custom-action windows-installer