2015-02-17 3 views
1

Я написал установщик WIX с помощью wixsharp, который завершает устаревшую процедуру установки, в которой используется командный файл. При запуске MSI как не-администратора я получаю приглашение поднять (диалоговое окно UAC), однако партия скрипт запускается как не админЗапустить скрипт wix-скрипта как повышенный/admin

var project = new Project(string.Format("App"); 
project.Actions = new[] { new PathFileAction(@"C:\build\build_script.bat", args[1], @"C:\build\", Return.check, When.After, Step.InstallExecute, Condition.NOT_Installed, Sequence.InstallExecuteSequence) }; 
project.UI = WUI.WixUI_InstallDir; 

Один из способов обойти это начать командную строку Администратор и запустите MSI с помощью msiexec - это работает, но очень неуклюже.

Как я могу сделать мой PathFileAction работать как администратор?

ответ

0

Я не вижу содержимое build_script.bat, но я предполагаю, что он устанавливает MSI молча. В этом случае приглашения UAC невозможны, поэтому установщик выходит из строя без личного сбоя. Вы должны запустить файл .bat повышенным, или вам нужно «благословить» MSI, рекламируя его (msiexec/jm), чтобы он сам поднялся на место от не повышенного пользовательского процесса.

+0

Chris Я пытаюсь использовать 'msiexec/jm', однако он уже сам поднимается (возможно, он может быть зарегистрирован в программах добавления/удаления?) – wal

+0

Крис, после запуска 'msiexec/jm App.Msi' в командной строке администратора, я получаю это «у вас нет достаточных привилегий для завершения повторного использования этого продукта. Re-Advestisment требует инициирования с помощью локальной системной учетной записи, вызывающей API MsiAdvertiseScript, например, с помощью развертывания программного обеспечения групповой политики. – wal

1

Я использовал this answer, который основан на чистом WIX - вам нужно добавить Execute='deferred' Impersonate='no' в выходной XML поэтому в wixsharp это возможно через Attributes ...

var publishAction = new PathFileAction(@"C:\build\build_script.bat"... 
publishAction.Attributes = new Dictionary<string, string>() 
{ 
    {"Execute", "deferred"}, 
    {"Impersonate", "no"} 
}; 

UPDATE: это будет запустить скрипт как NT AUTHORITY\SYSTEM - если вы хотите запустить его как самостоятельно (с повышенными разрешениями), это выглядит так: is not possible

+0

publishAction имеет свойства: Impersonate = false и Execute = Execute.deferred, поэтому нет необходимости устанавливать атрибуты. – VikciaR