Wix Toolset - Файл для администратора не появляется, когда установщик является администратором - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь использовать условие компонента для руководства администратора pdf. Если установщик находится в группе администраторов, я хочу установить руководство администратора. Вот как я это настраиваю, но он не устанавливается, даже если установщик является администратором. Чего мне не хватает?

Требование:

InstallScope="perUser" />

<Condition>Privileged</Condition>

Найти ниже:

 <Component Id="cmp_ManualForAdmins.pdf" Guid="4C28B047-74D2-4642-A180-0039B4C2C5BC">
    <File Id="fil_ManualForAdmins.pdf" Name="ManualForAdmins.pdf" Source="$(var.WindowsFormsApp1_TargetDir)ManualForAdmins.pdf">
      <Shortcut Id="startMenuAdminManual" Directory="ProgramMenuSubFolder" Name="AdminManual"></Shortcut>
    </File>
    <Condition>Privileged</Condition>
  </Component>

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Административная установка : Администраторы обычно выполняют административную установку (извлечение файлов) установки - по крайней мере, если они работают в больших компаниях, которые занимаются упаковкой приложений , Поэтому я стараюсь сделать файлы, подобные этому, легко видимыми на извлеченном исходном носителе - вместо того, чтобы устанавливать их во время обычной установки (или и то, и другое, или неважно, какой).

Пример административной установки (прославленный файл извлечение):

msiexec /a Test.msi TARGETDIR=D:\ExtractedFiles\

Подробнее об административных установках .

Admin.pdf : вот быстрый взлом что я не проверял экстенсивно. The admin.pdf will show up during file extraction and not during installation:

<..>

<Feature Id="MainApplication" Title="MainApplication" Level="1">
  <Feature Id="SomeFiles" Title="SomeFiles" Level="1" />

  <!-- Remove "Display" attibute to show Admin feature in normal setup GUI -->
  <Feature Id="Admin" Title="Admin" Level="1001" Display="hidden" />

</Feature>

<Directory Id="TARGETDIR" Name="SourceDir">

  <Component Id="AdminManual" Feature="Admin" Guid="{00000000-0000-0000-0000-0000DBFB0000}">
    <File Source="D:\Admin.pdf"  />
  </Component>

<..>

Запуск административной установки извлечет admin.pdf в каталог извлечения верхнего уровня:

msiexec /a Test.msi TARGETDIR=D:\ExtractedFiles\

Функция администратора скрыта от нормальная установка GUI. Измените атрибут «Показать», чтобы изменить это. Например, просто удалите его - для целей тестирования.

0 голосов
/ 27 марта 2020

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

Я подумал, что настраиваемое действие может помочь обойти это но при поиске C# Detect Admin обнаружил различные классы и вызовы API, которые все имели одинаковое поведение.

Если я установил прототип MSI из командной строки с повышенными привилегиями, условие оценивается как true, а 'admin.txt' файл установлен. С не повышенного уровня он не установлен.

Так что бы я сделал? Одна из двух вещей:

1) Создайте второй Docs MSI, который является установкой на машину, требующий повышения прав

или

2) Создайте и разверните файл docs.exe, который проявляется в требовании администратора. Если программа успешно повышает уровень, тогда нужно извлечь PDF из встроенного ресурса во временный каталог и выполнить ShellExecute, чтобы запустить средство просмотра PDF по умолчанию с этим файлом.

...