如何隐藏或禁用维克斯安装程序取消按钮?(How to hide or disable Cancel

2019-10-29 05:56发布

我是新来的WiX的安装程序。 我需要隐藏禁用维克斯安装程序的取消按钮进度条运行时。

我用Google搜索,但没有找到一些有用的链接隐藏取消按钮。 我发现这一点: 隐藏取消按钮的安装过程中 ,但仍然不知道如何使用自定义操作。 是否有任何人谁可以给我一些指导,以实现这一目标?

我也做了下面的事情来隐藏取消按钮,但它不工作。 首先,我已用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,但还是取消按钮的显示位置。 要检查功能是否调用与否,我把睡眠(10000)和显示状态的安装程序,它工作正常,但取消按钮的显示位置。

Answer 1:

隐藏取消按钮

您发现链接是最权威的,可以发现。 它说,这一切,让我总结一下这里谁发现这个未来的任何用户。

在这样做之前,我们要问,为什么你需要这个? 这可能表明,以适当避免应在一些其他的方式来解决的问题。

如何隐藏的MSI安装过程中的取消按钮?

  1. msiexec.exe的:你可以隐藏Cancel通过与安装按钮! :做一个基本的用户界面级别安装时指定的命令行选项msiexec.exe /I Setup.msi /QB-! 。 您可以与您一起MSI提供一个批处理文件来安装这个样子,或在您的配电系统(SCCM或类似)的配置。

  2. Windows安装程序API(MSI外运行):您可以通过调用安装MSI API COM自动化 (的VBScript和其他脚本)或MSI API的Win32安装程序功能 (C ++)。 这里的VBScript:

     Dim Installer As Object Set Installer = CreateObject("WindowsInstaller.Installer") Installer.UILevel = msiUILevelBasic + msiUILevelHideCancel Installer.InstallProduct "example.msi" 
  3. 自定义操作 (MSI内运行):您可以隐藏通过发送安装的实际文件拷贝过程中的取消按钮INSTALLMESSAGE_COMMONDATA消息:

     Dim rec : Set rec = Installer.CreateRecord(2) rec.IntegerData(1) = 2 rec.IntegerData(2) = 0 Session.Message 184549376, rec 

维克斯样品标记

不切片面包以来最伟大的事情,但这里有一些快速的WiX的标记片段插入到您的WiX源。 我要在这一个多看看,但你可以试一试:

你需要编译到您的WiX的MSI(同上)实际的VBScript。 另存为HideCancel.vbs

Dim rec : Set rec = Installer.CreateRecord(2)
rec.IntegerData(1) = 2
rec.IntegerData(2) = 0
Session.Message 184549376, rec

而实际的WiX的标记(插入到你的主WiX工程):

<Binary Id='HideCancel.vbs' SourceFile='HideCancel.vbs' />
<CustomAction Id='HideCancel.vbs' VBScriptCall='' BinaryKey='HideCancel.vbs' 
              Execute='immediate' Return='ignore'/>

<!-- You can leave out this element -->
<InstallUISequence>
  <Custom Action='HideCancel.vbs' Before='AppSearch' />
</InstallUISequence>

<!-- Required element -->
<InstallExecuteSequence>
  <Custom Action='HideCancel.vbs' Before='AppSearch' />
</InstallExecuteSequence>

如果你有问题Before='AppSearch' ,可能与尝试Before='LaunchConditions'Before='FindRelatedProducts' 。 严格来说,你不需要InstallUISequence上面似乎元素。

令人惊讶的是现在看来,这是不可能禁用在对话框向导(不知道这是维克斯具体,可能不是)取消按钮,但您可以在安装进度隐藏对话框一旦您的设置实际上是运行文件复制或安装操作本身 - 这是希望你需要什么?

如果你也想禁用Cancel在设置向导对话框按钮,然后你需要修改维克斯对话框控件,这是更多的工作。 FireGiant教程UI巫术用户界面再访



文章来源: How to hide or disable Cancel button in WIX Installer?