Создать MSI и обеспечить всех пользователей с помощью Visual Studio - PullRequest
0 голосов
/ 29 июня 2018

Я создал установщик с помощью Visual Studio 2015 (с дополнением установщика Visual Studio). Цель состоит в том, чтобы всегда запускать приложение с одними и теми же локальными ресурсами, независимо от того, кто вошел в систему, поэтому мы нацеливаемся на [CommonAppDataFolder] (C: \ ProgramData ... на Win10). Инсталлятор прекрасно работает, размещая все общие ресурсы там, где мы хотим. Но сгенерированный MSI предоставляет возможность установки как «все» или просто «просто я»

enter image description here

Мы хотим, чтобы опция серого цвета была выделена серым. Есть ли способ сделать это из Visual Studio как часть процесса сборки для MSI.

Я вижу некоторые решения, которые включают запуск MSIEXEC с различными параметрами, например, ALLUSERS , но мне интересно, есть ли способ настроить это так, чтобы это происходило автоматически в Visual Studio.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Окно свойств проекта (НЕ свойства) можно отобразить, выбрав проект в обозревателе решений, а затем F4. Вы можете установить InstallAllUsers на True там.

В окне свойств диалогового окна InstallFolder имеется установочный InstallAllUsersVisible, поэтому просто установите для него значение False.

0 голосов
/ 29 июня 2018

Я не использую этот конкретный инструмент. Там может быть лучший способ достичь того, что вы хотите, чем ниже "взломать". Добавление, так как других ответов у вас нет (пока).

ОБНОВЛЕНИЕ : Пойдите с ответом Фила. У меня нет инструмента для проверки, но он выглядит хорошо. Оставив в этом ответе только для записи. Не рекомендуется, если у вас нет других вещей, которые вы хотите изменить.

Пост-процесс MSI

Скрытие управления : не идеально, но если вы не возражаете против последующей обработки MSI (может быть автоматизировано с помощью API-интерфейса MSI), вы можете вставить строку в Таблица ControlCondition , чтобы скрыть весь рассматриваемый диалоговый элемент управления.

Специальный образец : Скрытие кнопки «Назад» от настройки LicenseAgreementDlg - просто добавьте эту строку (я думаю, события, определенные в другом месте, могут показать ее снова):

ControlCondition Table.


Диалог во время выполнения : Ниже приведен фактический диалог во время выполнения.

Dialog at runtime


MSI API

Для автоматизации вышеперечисленного. Возьмите WiRunSQL.vbs - часть Windows SDK - просто поищите в своей папке SDK, если у вас установлена ​​Visual Studio. Также много копий на github .

В пакетном файле:

cscript.exe "%~dp0"\WiRunSQL.vbs "MySetup.msi" "INSERT INTO `ControlCondition` (`Dialog_`, `Control_`, `Action`, `Condition`) VALUES ('LicenseAgreementDlg', 'Back', 'Hide', '1')"    
pause

Я, честно говоря, мог бы ввести жесткий код ALLUSERS=1 в таблицу Property .

...