Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запустить файл от другого пользователя

296
19 апреля 2018 года
Virtuoso
331 / / 31.07.2005
Здравствуйте.
Пишу на VS2017, VB.net.
Задача - запустить файл в сетевой папке. Делаю через Process.Start.
Но доступ в папку пользователь операционной системы не имеет. Ну т.е. в диспетчере учётных данных нет записи для этого сервера.
Программой я туда попадаю, используя Impersonate.
Так вот в рамках этого Impersonate работают, например, такие вещи как IO.File... или My.Computer.FileSystem ...
А Process.Start игнорирует impersonate (если я корректно выражаюсь, но суть думаю ясна) и не может достучаться, конечно до запускаемого файла.
Как быть?
Либо как-то его можно заставить лезть под нужным пользователем? Либо есть аналог для Process.Start, который будет работать как надо?

Очень нужна помощь!

PS: лезть в папку именно под другим пользователем, который неизвестен человеку-пользователю - обязательно.
296
20 апреля 2018 года
Virtuoso
331 / / 31.07.2005
Попробовал в Total Commander. Работает именно так как мне нужно.
Он при попытке доступа в сеть вызывает окно авторизации от Windows. Вводишь, работает. Но при этом через проводник когда пытаешь зайти туда же, не пускает, просит опять ввести логин/пароль (как и нужно).
А через тотал файлы открываются, ИЗМЕНЕНИЕ/СОХРАНЕНИЕ ИХ ТОЖЕ РАБОТАЕТ. Даже если тотал закрыть (ну это я так, для справки). Даже если скопировать в тотале что-то в буфер, потом в проводнике он вставляет это. Значит при "вставлении" система лезет в сетевое расположение с логином и паролем. НО, если что-то скопировать в буфер, потом закрыть тотал, буфер очищается (тоталом или системой интересно).
Тотал закрываешь-открываешь доступ есть. Прекращается только при выходе из системы.
Напрашивается у меня такой вывод: в винде регистрируется логин и пароль для доступа на нужный узел ДЛЯ КОНКРЕТНОГО ПРИЛОЖЕНИЯ!? Или вроде того.
Прав ли я, кто знает?
Ну и, конечно, вопрос - как сделать так же? Именно такая модель доступа мне и нужна.
296
20 апреля 2018 года
Virtuoso
331 / / 31.07.2005
Продолжаю общаться сам с собой)
В PowerShell "такие же результаты" даёт команда "net use". Авторизуешься, потом лазишь по сети, открываешь файлы, при этом через проводник доступ не появляется. Таким образом обнаружено направление, куда рыть)
296
20 апреля 2018 года
Virtuoso
331 / / 31.07.2005
Я просто в шоке какое простое решение я "натыкал"!
Просто выполняю
 
Код:
Shell("net use \\DOMAIN /user:DOMAIN\USERNAME PASSWORD")
После этого МОЕЙ ПРОГРАММЕ есть доступ куда указал.
Работает и копирование в буфер, и вставка оттуда даже после закрытия программы (видимо тотал всё-таки сам очищает буфер... может в вопросах безопасности). И работа с файлами, как я описывал выше.
А я 3 дня вожусь с Impersonate. Код весь перекурочил...

Остаётся надеяться только, что пользуясь таким методом, я не организую дырку в запрете доступа человеку-пользователю. :)

Спасибо мне за помощь!)
327
20 апреля 2018 года
UserNet2008
748 / / 03.04.2010
Вы можете получить доступ к общей папке с помощью uri, например
 
Код:
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
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог