Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

Чтобы пройти аутентификацию с использованием общего ресурса, к которому у пользователя, запускающего процесс, нет разрешения (что часто происходит с административными общими ресурсами), попробуйте выполнить команду 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...

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

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

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

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

FileInfo[] files = di.GetFiles();

foreach (FileInfo f in files)
{
    Debug.WriteLine(f.Name);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top