在安装过程中隐藏“取消”按钮

可以使用命令行选项、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