在安裝期間隱藏取消按鈕
您可以使用命令列選項、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。 Field 2 中的值為 0 會隱藏按鈕,而 Field 2 中的值 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