Подтвердить что ты не робот

Как запустить пользовательский исполняемый файл с повышенными привилегиями?

Мне нужно запустить исполняемый файл для пользовательской настройки/срыва, после установки и перед удалением. Он должен работать с повышенными привилегиями. Как это сделать правильно?

4b9b3361

Ответ 1

Итак, окончательное решение было таким:

<CustomAction Id="Install" Directory="APPLICATIONROOTDIRECTORY"
              Execute="deferred" Impersonate="no" Return="ignore"
              ExeCommand="[APPLICATIONROOTDIRECTORY]MyExeName.exe -install" />

<CustomAction Id="Uninstall" Directory="APPLICATIONROOTDIRECTORY"
              Execute="deferred" Impersonate="no" Return="ignore"
              ExeCommand="[APPLICATIONROOTDIRECTORY]MyExeName.exe -uninstall" />

<InstallExecuteSequence>

  <Custom Action='Install' After='InstallFiles' >
    $ProductComponent = 3
  </Custom>

  <Custom Action='Uninstall' After='InstallInitialize' >
    ?ProductComponent = 3
  </Custom>

</InstallExecuteSequence>

Кто-нибудь посоветует его улучшить?

Ответ 2

Посмотрите на blog в разделе Как создавать пользовательские действия, требующие административных привилегий

Другой ссылка, которая действительно объясняет все типы пользовательских действий. CustomAction Элемент в Wix.

Это поможет вам немного больше.

После просмотра вашего решения вы, похоже, выполняете CustomAction Type 18, здесь я вставил содержимое предыдущего блога для этих типов:

Пользовательский тип действия 18 Вызывает исполняемый файл, который устанавливается вместе с приложением во время текущего сеанса. Столбец "Источник" таблицы CustomAction содержит ключ к записи в таблице "Файл".

Столбец Target в таблице CustomAction содержит строку командной строки для исполняемого файла. Все обратные обработки, планирование выполнения и не-w370 > варианты выполнения применяются.

Поскольку файл установлен с приложением, существуют ограничения последовательности для пользовательских действий Тип 18:

If the source file is not already installed on the computer:
    Custom action must be sequenced after CostFinalize action because only after this action path to the file can be resolved.
If the source file is not already installed on the computer:
    Deferred custom actions of this type must be sequenced after the InstallFiles action.
    Non-deferred custom actions of this type must be sequenced after the InstallFinalize action.

Точка входа в пользовательское действие получает дескриптор сеанса установки. Во время выполнения отложенных пользовательских действий сеанс может больше не существовать. Чтобы получить значение свойств, используйте свойство CustomActionData.

Вот как добавить пользовательское действие Type 18 в Wix:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Component Id="Component1"
             Guid="*">
    <File Id="MyCA" Name="MyCA.exe" />
  </Component>
</Directory>

<CustomAction Id="DoSomething"
              FileKey="MyCA"
              ExeCommand="-switch"
              Execute="deferred"
              Return="check"
              HideTarget="no"
              Impersonate="no" />

<InstallExecuteSequence>
  <Custom Action="DoSomething" Before="InstallFinalize" />
</InstallExecuteSequence>

Сначала мы добавляем MyCA.exe в таблицу файлов.

Мы также добавляем настраиваемое действие типа 18 в таблицу CustomAction. Атрибут FileKey указывает на элемент с dll настраиваемого действия. Атрибут ExeCommand указывает строку командной строки для исполняемого файла.

Последнее, что нужно сделать, это запланировать наше пользовательское действие во всех необходимых таблицах последовательности.

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

Ответ 3

Вы можете добавить 'NOT REMOVE' для установки и восстановления последовательности. И "Установлено AND (REMOVE =" ALL ")" только для последовательности UnInstall.

    <InstallExecuteSequence>
      <Custom Action='Install' After='InstallFiles' >
        NOT REMOVE
      </Custom>

      <Custom Action='Uninstall' After='InstallFiles' >
         Installed AND (REMOVE = "ALL")
      </Custom>

    </InstallExecuteSequence>

Ответ 4

Надеюсь, это будет полезно для кого-то, кто борется с набором инструментов Wix Теги: CustomAction, InstallExecuteSequence, Запуск exe после завершения установки Wix, Двоичный файл или файл ресурсов в Wix

Хотя, не удалось найти, как сделать из BootStrapper

Имя файла: Product.wxs

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="TestingQtExec" Language="1033" Version="1.0.0.0" 
           Manufacturer="My Company" UpgradeCode="PUT-GUID-HERE">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MediaTemplate EmbedCab="yes" />

    <Feature Id="ProductFeature" Title="TestingQtExec" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
    </Feature>

    <Binary Id="WixCA1"
               SourceFile="FTDI.exe"/>

    <!-- install plugin -->
    <CustomAction Id="FTDIInstall"
              BinaryKey ="WixCA1"
              ExeCommand="/passive"
              Execute="commit"
              Return="asyncNoWait"
              HideTarget="no"
              Impersonate="no" />


    <InstallExecuteSequence>

      <Custom Action="FTDIInstall" Before="InstallFinalize" />
    </InstallExecuteSequence>

               </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="TestingQtExec" />
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <Component Id="cmpSampleTXT" Guid="*">
        <File Source="Sample.txt" />
      </Component>
    </ComponentGroup>
  </Fragment>
</Wix>