Как заставить настройку работать для пользователей с ограниченными правами (без прав администратора) - PullRequest
10 голосов
/ 02 ноября 2010

Я создал проект установки Visual Studio с Visual Studio 2008 (SP1) для надстройки Office 2007.Программа установки копирует файлы только в папку для каждого пользователя (LocalAppData) и записывает только параметры реестра в HKEY_CURRENT_USER, но при запуске под Windows 7 MSI запрашивает учетные данные администратора непосредственно перед началом копирования файлов.Программа установки отлично работает под ограниченной учетной записью пользователя в Windows XP, но в Windows 7 привилегии администратора, по-видимому, требуются.

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

** ОБНОВЛЕНИЕ 2010-11-03 (более подробно) **

Когда ясоздайте проект установки Visual Studio, он создает файл setup.exe и файл MSI.Visual Studio 2008, похоже, не дает мне адекватного контроля над тем, как создается файл setup.exe или как создается файл MSI.Файл setup.exe, по-видимому, предназначен только для установки любых необходимых компонентов, необходимых для моей надстройки Office 2007.Это файл MSI, который можно запустить независимо, который устанавливает фактическую надстройку Office 2007.Я хочу узнать, как пометить файл MSI таким образом, чтобы он не запрашивал привилегии администратора, поскольку мой файл MSI копирует файлы только в папку для каждого пользователя и записывает только параметры реестра в HKEY_CURRENT_USER.

Ответы [ 3 ]

11 голосов
/ 04 ноября 2010

Мне кажется, я нашел ответ на этой странице:

http://blogs.msdn.com/b/rflaming/archive/2006/09/30/778690.aspx


Как создать пакет для обычного пользователя?

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

  1. Используйте настраиваемое действие типа 51 в InstallUISequence, чтобы всегда сбрасывать ALLUSERS (опция для пользователя)

  2. Файлы должны быть записаны только в папки, к которым у обычного пользователя есть доступ. Предполагая, что для ALLUSERS всегда задано значение для каждого пользователя, вы можете использовать свойства перенаправляемой папки, но не ProgramFilesFolder, поскольку она не перенаправляет пользователя.

  3. Установите приложение в папку под LocalAppDataFolder.

  4. Все параметры реестра должны быть записаны в HKCU, который равен 1 в корневом столбце таблицы реестра.

  5. Перевернуть бит 3 свойства количества слов в потоке сводной информации, чтобы указать, что запрос учетных данных не требуется.

  6. Если у вас есть загрузчик (обычно с именем setup.exe), манифестируйте требуемый уровень выполнения для запуска asInvoker.

  7. Пройдите ICE Validation, поскольку ICE имеют проверки на неправильное смешивание состояния пользователя и компьютера.

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

  9. Предоставьте своим пользователям документацию о характере пакета, специфичном для пользователя, поскольку это не типично для сегодняшних установок приложений.


ПРИМЕЧАНИЕ. Шаг 5 можно выполнить с помощью Orca, средства редактирования MSI от Microsoft. Откройте файл MSI в Orca, выберите «Просмотр» -> «Сводная информация» ... затем установите флажок «Соответствует UAC».

ПРИМЕЧАНИЕ # 2: Шаг 5 можно выполнить с помощью файла сценария WiSumInf.vbs, включенного в Microsoft SDK: C: \ Program Files \ Microsoft SDK \ Windows \ v7.0 \ Samples \ sysmgmt \ msi \ scripts \ WiSumInf .vbs

ПРИМЕЧАНИЕ # 3: Шаг 1, кажется, позаботился в Шаговом проекте Visual Studio, щелкнув правой кнопкой мыши по проекту установки, выбрав View -> User Interface, получив свойства для «Install / Start / Installation Folder» и установите для параметра «InstallAllUsersVisible» значение False.

ПРИМЕЧАНИЕ # 4: Еще один способ выполнить Шаг 5, использовать средство MsiInfo.exe, включенное в «Компоненты Windows SDK для разработчиков установщика Windows» http://msdn.microsoft.com/en-us/library/aa370310(VS.85).aspx

Дополнение к ПРИМЕЧАНИЕ № 4: Если вы используете длинные имена файлов и сжатые носители (поведение по умолчанию для MSI), команда PostBuildEvent будет выглядеть примерно так:

"C:\Program Files (x86)\Windows Kits\8.1\bin\x86\MsiInfo.exe" "$(BuiltOuputPath)" /w 10

Обратите внимание, что вам придется изменить путь к MsiInfo, чтобы он совпадал с тем, который есть в вашей системе.

2 голосов
/ 16 апреля 2019

Для Visual Studio v2017 с проектами установщика Visual Studio v0.9.1:
Для этого решения требуется средство командной строки, которое устанавливается как часть Windows SDK

  1. В Visual Studio: выберите проект установщика Visual Studio в обозревателе решений.
    Нажмите клавишу F4, чтобы увидеть свойства проекта
    Установите для InstallAllUsers значение false

  2. Щелкните правой кнопкой мыши проект в обозревателе решений> Вид> Файловая система
    Выберите папку приложения. (щелкните правой кнопкой мыши> Окно свойств)
    Измените [ProgramFilesFolder] на [LocalAppDataFolder]

  3. Сборка MSI
    (Щелкните правой кнопкой мыши проект в обозревателе решений> Построить)

  4. Откройте командную строку или добавьте событие postbuild для запуска утилиты Windows SDK msiinfo.exe - пример:
    "C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\MsiInfo.exe" "c:\yourprogram\installer.msi" -w 10 1020 *
    *

Примечания. Переключатель msiinfo.exe -w 10 устанавливает для свойства MSI «Word Count Summary» файла MSI значение «сжатые - повышенные привилегии не требуются для установки этого пакета». Подробнее здесь

0 голосов
/ 03 ноября 2010

Если ваш установщик называется «setup.exe» или «install.exe», Win7 «знает», что это установщик, и по умолчанию запустит его в режиме «требуется администратор».Вам нужно будет добавить манифест вашего установщика (внутреннего или внешнего), чтобы он работал с меньшими разрешениями.

Пример манифеста из MSDN показан ниже.Измените значение «IsUserAdmin» на имя вашей программы, затем сохраните его как « имя исполняемого файла .exe.manifest» в папке рядом с exe.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="IsUserAdmin"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>

См. Статью здесь для получения дополнительной информации.

...