Как вы запускаете другой .exe из VB.NET как другой пользователь? - PullRequest
5 голосов
/ 22 июля 2010

Как вы запускаете другой .exe из VB.NET, но как другой пользователь?

Я ожидаю, чтобы запустить .exe, как "Левый клик -> Запуск от имени -> Введите пользователя / Pass -> Нажмите OK«Если я сделаю это, мое приложение будет работать как положено (мне нужно запустить его как другой пользователь, чтобы получить доступ к некоторым папкам в сети)

Но если я использую это в VB.NET System.Diagnostics.Process.Start(System.Windows.Forms.Application.ExecutablePath, PARAMETER, USER, PASSWORD, DOMAIN)

Приложение запускается с другим пользователем ... но Excel (внутри моего приложения с Interop) не удается открыть файл в папке с ограниченным доступом.

(я снова запускаю то же приложение, но с другим пользователем, просто чтобы не создавать больше .exe-файлов ... но я уже пытался с vbScript)

Опять же, Process.Start FAILS, чтобы открыть Excel, используя другого пользователя ... но щелкните левой кнопкой мыши -> Выполнить как успех вчто ... почему ??по-другому??

вот что делает приложение:

  1. Откройте приложение
  2. , проверьте, есть ли параметр
  3. , если параметра нет, затем перезапустите приложениес другим пользователем и отправьте некоторый параметр
  4. , если есть параметр open Excel
  5. откройте файл xlsx

, но если я дважды щелкну ... Excel откроется... использует 50% ЦП и выдает ошибку, что он не может открыть файл ...

, если я запускаю его напрямую с нужным пользователем и передаю ... все работает нормально. Любые предложения, каккак это решить?(олицетворяет работает отлично .. но он открывает Excel с фактическим пользователем .. не тот, кто с правами)

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 июля 2010

Если вы получаете сообщение «Handle is invalid», попробуйте что-то вроде этого:

dim info As New ProcessStartInfo("...")

info.UseShellExecute = False

info.RedirectStandardInput = True  //This is the key

info.RedirectStandardError = True  //This is the key

info.RedirectStandardOutput = True //This is the key

info.UserName = "username"

info.Password = "password"

Using (install As Process = Process.Start(info))


      Dim output As String = install.StandardOutput.ReadToEnd()

      install.WaitForExit()


End Using

Указание любого из RedirectStandardOutput = true, RedirectStandardError = true или RedirectStandardInput = true вызывает запуск процесса с помощью STARTF_USESTDHANDLES. Если у вашего процесса нет ни одного из этих дескрипторов, то CreateProcessWithLogon завершится с ошибкой «Неверный дескриптор».

Вы ДОЛЖНЫ перенаправить его (даже если не собираетесь ничего писать).

Привет

0 голосов
/ 22 июля 2010

Это действительно интересно.По умолчанию я считаю, что компоненты COM COM Excel настроены на работу как Интерактивный пользователь (т. Е. Пользователь вошел в систему).Если они настроены для запуска в качестве запускающего пользователя , то подражание должно работать.Конечно, это не объясняет, почему работает «Запуск от имени ...» (я не знаю механизма этого, так что, возможно, это не подражание).

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

...