2015-08-21 7 views
1

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

я использую НСИ и уже пытались UAC

!insertmacro UAC_AsUser_ExecShell "" "some.exe" "" "" "" 

, но до сих пор его запустить от имени администратора.

пытался использовать планировщик задач

    string path = System.Reflection.Assembly.GetExecutingAssembly().Location; 
       td.Actions.Add(new ExecAction("" + path + "", "", null)); 
       td.Settings.DisallowStartIfOnBatteries = false; 
       td.Settings.AllowHardTerminate = false; 
       td.Settings.StopIfGoingOnBatteries = false; 
       td.Settings.ExecutionTimeLimit = System.TimeSpan.Zero; 
       td.Settings.IdleSettings.StopOnIdleEnd = false; 
       // Register the task in the root folder 
       ts.RootFolder.RegisterTaskDefinition("task", td); 

но задача также Гото администратор и я не могу получить его текущего пользователя.

любые идеи?

+0

Никто не знает? .. –

+0

Ожидая ответа менее чем за 45 минут на этом низком уровне Трафик тега немного суровый ИМХО. – Anders

ответ

1

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

Как вы, вероятно, знаете, UAC действительно изменил то, насколько распространено приложение для работы как другой пользователь, чем пользователь «вошел в систему». Вам просто нужно иметь дело с тем, что ОАК существует и решить, считаете ли вы, что это стоит времени, необходимого для его работы, и возможных ошибок и проблем, которые могут возникнуть.

Есть по крайней мере 4 способа запустить что-то, как «текущий пользователь», все они имеют проблемы и может выйти из строя или в конечном итоге работает как «неправильный» без прав администратора пользователь:

  • Используйте токен (по-видимому) невыполненного родителя, это то, что делает плагин NSIS UAC.
  • Используйте Планировщик задач Windows. Это была рекомендуемая практика в ранние Vista, но я считаю, что Microsoft отошла от этого метода.
  • Используйте COM-объект оболочки в проводнике, который содержит панель задач для вызова ShellExecute для вас. StdUtils plugin предоставляет метод ExecShellAsUser, который делает это.
  • Используйте службу Windows NT. Поскольку он работает как SYSTEM, он может получить дескриптор маркера пользователя в любом сеансе.

Если вы решите, что хотите по-прежнему пытаться это сделать, вам необходимо определить свое определение текущего пользователя перед тем, как выбрать метод.

Это пользователь, который вошел в систему на экране приветствия? Является ли пользователь оболочкой Explorer (панель задач и т. Д.) Работает как? Является ли это родительским процессом вашего процесса установки? Вы также должны иметь в виду, что runas.exe существует, и пользователь может попытаться запустить что-то в качестве конкретного пользователя по какой-либо причине ...