在安装过程中隐藏“取消”按钮
可以使用命令行选项、Windows Installer API 或自定义操作隐藏用于取消安装的“取消”按钮。 可以针对部分或全部安装隐藏“取消”按钮,具体取决于使用的方法。
在命令行中隐藏“取消”按钮
通过使用 (!) 命令行选项,可以在安装过程中隐藏“取消”按钮。 只能对基本用户界面级别安装 (/qb) 执行此操作。 对于整个安装,“取消”按钮处于隐藏状态。 有关详细信息,请参阅命令行选项和用户界面级别。 下面的命令行可隐藏“取消”按钮并安装 Example.msi。
msiexec /I example.msi /qb!
在应用程序或脚本中隐藏“取消”按钮
可以编写应用程序或脚本来隐藏“取消”按钮。 只能对基本 UI 级别安装执行此操作,因此会在整个安装中隐藏“取消”按钮。
若要在应用程序中隐藏“取消”按钮,请在调用 MsiSetInternalUI 时设置INSTALLUILEVEL_HIDECANCEL。 下面的示例隐藏“取消”按钮并安装 Example.msi。
#include <windows.h>
#include <stdio.h>
#include <Shellapi.h>
#include <msi.h>
#include <Msiquery.h>
#include <tchar.h>
#pragma comment(lib, "msi.lib")
int main()
{
INSTALLUILEVEL uiPrevLevel = MsiSetInternalUI( INSTALLUILEVEL(INSTALLUILEVEL_BASIC | INSTALLUILEVEL_HIDECANCEL), 0);
UINT uiStat = MsiInstallProduct(_T("example.msi"), NULL);
return 0;
}
若要在脚本中隐藏“取消”按钮,请将 msiUILevelHideCancel 添加到 Installer 对象的 UILevel 属性。 下面的 VBScript 示例隐藏“取消”按钮并安装 Example.msi。
Dim Installer As Object
Set Installer = CreateObject("WindowsInstaller.Installer")
Installer.UILevel = msiUILevelBasic + msiUILevelHideCancel
Installer.InstallProduct "example.msi"
使用自定义操作隐藏安装部分的“取消”按钮
安装可以在安装过程中隐藏和取消隐藏“取消”按钮,方法是使用 DLL 自定义操作或脚本发送 INSTALLMESSAGE_COMMONDATA 消息。 有关详细信息,请参阅动态链接库、脚本、自定义操作和使用 MsiProcessMessage 向 Windows Installer 发送消息。
对自定义操作的调用必须提供记录。 此记录的字段 1 必须包含值 2(二)才能指定“取消”按钮。 字段 2 必须包含值 0 或 1。 如果字段 2 中的值为 0,则隐藏按钮,如果为 1,则取消隐藏按钮。 请注意,如果使用 MsiCreateRecord 分配大小为 2 的记录,则将提供字段 0、1 和 2。
以下示例 DLL 自定义操作隐藏“取消”按钮。
#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;
}
以下 VBScript 自定义操作隐藏“取消”按钮。
Function HideCancelButton()
Dim Record
Set Record = Installer.CreateRecord(2)
Record.IntegerData(1) = 2
Record.IntegerData(2) = 0
Session.Message msiMessageTypeCommonData, Record
' return success
HideCancelButton = 1
Exit Function
End Function