Как сделать Vista / UAC осведомленным установщиком самораспаковывающегося - PullRequest
1 голос
/ 10 февраля 2012

Я распространяю свое программное обеспечение с помощью самораспаковывающегося архива WinZip (SFX).
Мне известно о , и , .Но, похоже, это не работает для сценариев SFX.

Во время установки SFX распаковывает и запускает отдельную программу (написанную мной), которая выполняет установку.Это включает в себя создание записи реестра для списка программ под панелью управления Windows.Далее в программе есть манифест.Так что это должно быть "Vista-осведомлено".Исполняемый файл SFX также содержит манифест.

Проблема заключается в том, что Помощник по совместимости программ (PCA) в любом случае выдает сообщение "This program might not have installed correctly".Так что мои клиенты говорят мне, что я плохой программист ...

Я много гуглил и много читал о PCA, в том числе о многих сайтах Microsoft.
Те говорят мне:

  1. встроить манифест
  2. создать записи реестра для списка программ под панелью управления Windows

Мой манифест выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <applicationRequestMinimum>
        <defaultAssemblyRequest permissionSetReference="Custom" />
        <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
      </applicationRequestMinimum>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Так в чем же я ошибся?
Есть ли какие-нибудь дальнейшие действия для PCA?
Должен ли в исполняемый файл SFX входить некоторые другие вещи?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Мы исправили аналогичную проблему в NSIS, установив поле версии в заголовке PE на 6.0.Я считаю, что это было для нашего деинсталлятора, но это может относиться и к вашему сценарию.

2 голосов
/ 31 марта 2014

Как было описано в другом ответе, ключ правильно устанавливает заголовки в части файла PE ( Portable Executable ).Мы столкнулись с этой проблемой при попытке создать самораспаковывающиеся исполняемые файлы с использованием файлов SFX и 7-zip.

Формат Portable Executable (PE) - это формат файлов для исполняемых файлов, объектного кода, библиотек DLL, файлов шрифтов FON и других файлов, используемый в 32-разрядных и 64-разрядных версиях операционных систем Windows.Формат PE представляет собой структуру данных, которая инкапсулирует информацию, необходимую загрузчику ОС Windows для управления упакованным исполняемым кодом.

ПРИМЕЧАНИЕ: Файл PE формат похож на ELF в Linux.

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

ss #1

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

  1. Не было добавлено ни одной записи в Установка и удаление программ
  2. Поле Version для PE-компонента было правильно установлено

Исправление с помощью PE Tools

В нашем случае это, кажется, # 2 , что вызывало проблему.Итак, мы скачали PE Tools и открыли 7-zip SFX-файл. ПРИМЕЧАНИЕ: Мы загрузили файл 7zS.sfx.

После загрузки мы изменили следующую информацию о версии с 4 на 6.

ss #2

Ссылки

...