2008-09-26 4 views
7

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

+0

Это должно сработать. Какое исключение вы получаете? – 2008-09-26 15:12:15

ответ

6

От http://bytes.com/forum/thread689145.html:

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

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

+1

Это лучший подход, так как он устранит необходимость иметь дело с аутентификацией в вашем программном обеспечении (что легко ошибиться). – Luke 2008-09-26 15:30:16

0

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

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

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

FileInfo[] files = di.GetFiles(); 

foreach (FileInfo f in files) 
{ 
    Debug.WriteLine(f.Name); 
} 
2

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

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... 

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