2015-10-06 3 views
0

У меня есть приложение VB.NET, которое взаимодействует с MS-Outlook, и для этого оно должно работать без привилегий ADMIN. Все в порядке.Запуск приложения без прав ADMIN через Process.Start из повышенного приложения

Проблема возникает после того, как модуль LiveUpdate, отдельное приложение, работающее с привилегиями ADMIN, завершает его обновление и снова загружает основное приложение. Эта нагрузка выполняется с помощью:

Process.Start(MyApp.exe) 

но когда нагрузки «MYAPP», он не могут взаимодействовать больше с MS-Outlook, которые отказываются, что интерфейс отправки типичного сообщения программ, работающих на разных привилегиях контроля учетных записей. Я думаю, когда LiveUpdate выполняет Process.Start, команда идет с той же привилегией (ADMIN).

Факты:

  1. Liveupdate должна работать в ADMIN но MyApp должна работать в нормальном режиме.
  2. Оба имеют свой собственный МАНИФЕСТ, но, похоже, вызов выше обходит манифест MyApp, который по умолчанию установлен как Invoke.
  3. Если я закрою MyApp и запустил его вручную, все будет хорошо.
  4. Некоторые клиенты имеют ПОЛЬЗОВАТЕЛЬ/ПАРОЛЬ, другие - нет (Windows загружается автоматически без диалога пользователя/пароля).
    5.The запускается приложение в Windows Vista, 7, 8, 8.1 и 10.

Итак, есть ли какой-нибудь способ "Process.Start" приложение отбрасывая ADMIN привилегию от вызывающего абонента (LiveUpdate)?

Использование User/Password во время этого звонка не является вариантом Я думаю ... Спасибо!

+1

Я уверен, что нет способа. Вы можете добавить что-то еще, что не приподнято и действует как проводник, чтобы начать первое, что поднято, а затем начинает ваше приложение в обычном режиме. – user3697824

+0

Спасибо @ user3697824, я действительно считался одним и тем же ... –

ответ

0

Вот что я нашел: вы можете начать отмененный процесс с помощью повышенного программного обеспечения, запустив его через explorer.exe. Этот метод должен работать со всеми, кроме пользователей, которые являются администраторами (не администратором, а системным администратором). Я нашел эту информацию here.

Для кода части, это выглядит следующим образом: (в этом заслуга в plutonix, перейдя по ссылке выше)

Dim proc = New Process 
proc.StartInfo.UseShellExecute = True 
proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal 
proc.StartInfo.WorkingDirectory = mypath 

If chkAdmin.Checked Then     ' run this app as admin 
    proc.StartInfo.FileName = myApp 
    proc.StartInfo.WorkingDirectory = mypath 
    proc.StartInfo.Verb = "runas"   ' run "me" as admin 
    proc.StartInfo.Arguments = "" 
Else          ' run explorer w/app as arg 
    ' de-elevate new app instance to run de-elevated 
    proc.StartInfo.FileName = Path.Combine(windir, "explorer.exe") 
    proc.StartInfo.Verb = ""    ' important! 
    proc.StartInfo.Arguments = myApp  ' send the child app name as arg 
End If 

proc.Start() 

Я не проверял это из себя, но он должен работать правильно. (Снова все кредиты для этого отправляются пользователю: plutonix)

+0

Спасибо, SID, но если ваш поиск по нему глубже, вы увидите, что Microsoft указывает на него как на ошибку (действительно!) И рекомендует не использовать его, так как он будет исправлен в следующей версии Windows - и я увидел это, когда Windows была в версии 7. Я считаю, что это будет устаревать как можно скорее ... Но спасибо. –

+0

О, черт возьми, вероятно, теперь это было исправлено, спасибо, что сообщила мне, поскольку я сказал, что сам не пробовал. – Sid

+0

Нет проблем. Еще раз спасибо за помощь ... :) –

Смежные вопросы