Как скрыть или отключить кнопку «Отмена» в WIX Installer?

Я новичок в установщике WiX. Мне необходимо Спрятать или же запрещать кнопка отмены в установщике WIX, когда работает индикатор выполнения.

Я гуглил, но не нашел полезной ссылки, чтобы скрыть кнопку отмены. Я нашел это: Скрытие кнопки отмены во время установки, но до сих пор не знаю, как использовать настраиваемое действие. Есть ли кто-нибудь, кто может дать мне руководство для достижения этой цели?

Я сделал следующие вещи, чтобы скрыть кнопку отмены, но она не работает.
Прежде всего, я написал пользовательское действие в 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) и показал состояние установщика, и он работал, как и ожидалось, но кнопка отмены показывает.

0

Решение

Скрытие кнопки отмены

Ссылка, которую вы нашли, является наиболее авторитетной из найденных. Это говорит само за себя, но позвольте мне подвести итог здесь для любого будущего пользователя, который найдет это.

Прежде чем сделать это, мы должны спросить, зачем вам это нужно? Это может указывать на проблему, которую следует решить каким-либо другим способом, чтобы избежать ее надлежащим образом.

Как скрыть кнопку «Отмена» во время установки MSI?

  1. msiexec.exe: Вы можете скрыть Cancel кнопка путем установки с ! параметр командной строки, указанный при выполнении установки на уровне основного пользовательского интерфейса: msiexec.exe /I Setup.msi /QB-!. Вы можете поставить пакетный файл вместе с вашим MSI для такой установки или настроить его в своей системе распространения (SCCM или аналогичной).

  2. API установщика Windows (работает вне MSI): Вы можете вызвать установку через Автоматизация COM MSI API (VBScript & другие сценарии) или MSI API Win32 установщик функций (C ++). Вот VBScript:

    Dim Installer As Object
    Set Installer = CreateObject("WindowsInstaller.Installer")
    Installer.UILevel = msiUILevelBasic + msiUILevelHideCancel
    Installer.InstallProduct "example.msi"
  3. Custom Action (работает внутри 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. Я еще раз посмотрю на это, но вы можете попробовать:

Фактический VBScript, который вам нужно скомпилировать в свой WiX MSI (такой же, как указано выше). Сохранить как 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 Элемент выше, кажется.

Удивительно, но кажется невозможным отключить кнопку «Отмена» в мастере диалогов (не уверен, если это специфично для WiX, возможно, нет), но вы можете скрыть ее в диалоговом окне хода установки, когда ваши настройки фактически запускают копирование или установку файла Сама операция — что, надеюсь, вам нужно?

Если вы также хотите отключить Cancel кнопку в диалоговых окнах мастера настройки, то вам нужно изменить элементы управления диалогов WiX, что больше работы. FireGiant учебники: UI Wizardry а также Пользовательский интерфейс пересмотрен.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]