Запустить файл от другого пользователя
Пишу на VS2017, VB.net.
Задача - запустить файл в сетевой папке. Делаю через Process.Start.
Но доступ в папку пользователь операционной системы не имеет. Ну т.е. в диспетчере учётных данных нет записи для этого сервера.
Программой я туда попадаю, используя Impersonate.
Так вот в рамках этого Impersonate работают, например, такие вещи как IO.File... или My.Computer.FileSystem ...
А Process.Start игнорирует impersonate (если я корректно выражаюсь, но суть думаю ясна) и не может достучаться, конечно до запускаемого файла.
Как быть?
Либо как-то его можно заставить лезть под нужным пользователем? Либо есть аналог для Process.Start, который будет работать как надо?
Очень нужна помощь!
PS: лезть в папку именно под другим пользователем, который неизвестен человеку-пользователю - обязательно.
Он при попытке доступа в сеть вызывает окно авторизации от Windows. Вводишь, работает. Но при этом через проводник когда пытаешь зайти туда же, не пускает, просит опять ввести логин/пароль (как и нужно).
А через тотал файлы открываются, ИЗМЕНЕНИЕ/СОХРАНЕНИЕ ИХ ТОЖЕ РАБОТАЕТ. Даже если тотал закрыть (ну это я так, для справки). Даже если скопировать в тотале что-то в буфер, потом в проводнике он вставляет это. Значит при "вставлении" система лезет в сетевое расположение с логином и паролем. НО, если что-то скопировать в буфер, потом закрыть тотал, буфер очищается (тоталом или системой интересно).
Тотал закрываешь-открываешь доступ есть. Прекращается только при выходе из системы.
Напрашивается у меня такой вывод: в винде регистрируется логин и пароль для доступа на нужный узел ДЛЯ КОНКРЕТНОГО ПРИЛОЖЕНИЯ!? Или вроде того.
Прав ли я, кто знает?
Ну и, конечно, вопрос - как сделать так же? Именно такая модель доступа мне и нужна.
В PowerShell "такие же результаты" даёт команда "net use". Авторизуешься, потом лазишь по сети, открываешь файлы, при этом через проводник доступ не появляется. Таким образом обнаружено направление, куда рыть)
Просто выполняю
Код:
Shell("net use \\DOMAIN /user:DOMAIN\USERNAME PASSWORD")
Работает и копирование в буфер, и вставка оттуда даже после закрытия программы (видимо тотал всё-таки сам очищает буфер... может в вопросах безопасности). И работа с файлами, как я описывал выше.
А я 3 дня вожусь с Impersonate. Код весь перекурочил...
Остаётся надеяться только, что пользуясь таким методом, я не организую дырку в запрете доступа человеку-пользователю. :)
Спасибо мне за помощь!)
Код:
Dim sh_dir As DirectoryInfo = New DirectoryInfo("\xxx.xxx.xxx.xxx\Out-Shared\")
For Each fi As FileInfo In sh_dir.GetFiles()
fi.CopyTo("C:\temp\" + fi.Name)
Next
For Each fi As FileInfo In sh_dir.GetFiles()
fi.CopyTo("C:\temp\" + fi.Name)
Next