Ответ EASY оказался приемлемым ответом в этой теме:
Установщик Windows, использующий NT AUTHORITY \ SYSTEM вместо имени пользователя
[quote]
Короткий ответ: вы не можете сделать это в настройке Visual Studio, которая является установкой InstallAllUsers, поскольку все установщики VS сгенерировали настраиваемые действия, выполняемые от имени системной учетной записи.Поэтому вам нужно изменить настройки пользовательских действий в файле MSI с помощью инструмента редактирования, такого как Orca.Вы найдете пользовательское действие в таблице CustomAction в файле MSI, посмотрите значения типа (вероятно, это тип 3074), а затем отключите бит msidbCustomActionTypeNoImpersonate, чтобы он выполнялся под именем пользователя-установщика.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa368069(v=vs.85).aspx
Обратите внимание на то, что запуск под именем пользователя-установщика имеет свой собственный набор проблем, поскольку он НЕ совпадает с выполнением интерактивного пользователя.Профиль пользователя не загружен, поэтому объекты, связанные с пользователем (такие как HKCU, папки профиля пользователя), очень ненадежны.
Многие люди заполняют базы данных отдельными программами при первом запуске приложения, так чтоон работает как интерактивный пользователь и может быть разработан и отлажен как отдельная программа.Если во время установки происходит сбой заполнения, вы либо прекращаете установку и откатываетесь, либо продолжаете установку и получаете пустую базу данных, для которой вам может понадобиться программа для ее заполнения.[/ quote]
НЕ ТАК ЛЕГКИЙ ОТВЕТ , но отличным решением было следующее:
Отредактируйте файл MSI, удалив тип msidbCustomActionTypeNoImpersonate из записи настраиваемого действия.
Я сделал это программно в программе VB.NET следующим образом:
Dim o As WindowsInstaller.Installer = CType(CreateObject("WindowsInstaller.Installer"), WindowsInstaller.Installer)
Dim db As WindowsInstaller.Database
db = o.OpenDatabase(fil.FullName, WindowsInstaller.MsiOpenDatabaseMode.msiOpenDatabaseModeDirect)
Dim record As WindowsInstaller.Record = Nothing
view = db.OpenView("select File.File, FileName From File")
view.Execute(record)
record = view.Fetch
Dim bFound As Boolean = False
While record IsNot Nothing
Dim sFileName As String = record.StringData(2)
If sFileName.EndsWith("MYCUSTOMACTIONEXE.exe", StringComparison.CurrentCultureIgnoreCase) = True Then
bFound = True
Exit While
End If
record = view.Fetch
End While
If bFound = True Then
Dim sGUID As String = record.StringData(1)
' At time of writing this was changing a 3602 into a 1554, so removing msidbCustomActionTypeNoImpersonate
' The record key was _65BF5279_D2EA_42C1_AC66_90A684817EE5 which is the custom action for MYCUSTOMACTIONEXE.exe
view = db.OpenView("select Action, Type From CustomAction Where Source = '" & sGUID & "'")
view.Execute(record)
record = view.Fetch
If record IsNot Nothing Then
Dim sActionGUID As String = record.StringData(1)
Dim sType As String = record.StringData(2)
If sActionGUID IsNot Nothing AndAlso sActionGUID <> "" Then
' Take off Hex 800 which means noimpersonation
Dim lType As Integer = CInt(sType)
If lType And 2048 = 2048 Then
Dim sNewType As String = CStr(lType - 2048)
Dim v As WindowsInstaller.View = db.OpenView(
"update CustomAction set Type=" & sNewType & " Where CustomAction.Action = '" & sActionGUID & "'")
v.Execute()
End If
End If
End If
End If