Чтение скрытой доли в C # - PullRequest
       43

Чтение скрытой доли в C #

7 голосов
/ 26 сентября 2008

Итак, у меня есть небольшое приложение на C #, которое должно периодически проверять содержимое каталогов на нескольких машинах в сети. Я думал, что могу просто прочитать \ hostname \ C $ как путь к каталогу, но с обычным классом Directory, похоже, нет способа аутентификации на других серверах, чтобы вы могли получить доступ к скрытому общему ресурсу. Я уверен, что есть простой способ сделать это, что я упустил, но в данный момент я немного озадачен.

Ответы [ 3 ]

6 голосов
/ 26 сентября 2008

С http://bytes.com/forum/thread689145.html:

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

Самый простой способ - предоставить текущему пользователю соответствующие права на другие машины.

2 голосов
/ 26 сентября 2008

Для аутентификации с помощью общего ресурса, на который у пользователя, выполняющего процесс, нет прав (что часто имеет место для административных общих ресурсов), попробуйте выполнить команду net use:

net use SERVERNAME\IPC$ /user:USERNAME PASSWORD

Попробуйте запустить это в отдельном процессе перед кодом, который фактически пытается получить доступ к общему ресурсу, например ::

ProcessStartInfo psi = new ProcessStartInfo(
    "net", "use " + SERVERNAME + @"\IPC$ /user:" + USERNAME + " " + PASSWORD);
Process p = new Process();
p.StartInfo = psi;
p.Start();
p.WaitForExit();
p.Close();
// The code to access the share follows...

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

0 голосов
/ 26 сентября 2008

Вы ищете способ установить текущего пользователя во время выполнения?

Если нет, пока пользователь, выполняющий процесс, имеет доступ к этим машинам, это будет работать для вас:

DirectoryInfo di = new DirectoryInfo(@"\\machineName\c$\temp");

FileInfo[] files = di.GetFiles();

foreach (FileInfo f in files)
{
    Debug.WriteLine(f.Name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...