문제

따라서 네트워크의 여러 시스템에서 디렉토리의 내용을 정기적으로 확인 해야하는 작은 C# 앱이 있습니다. 디렉토리 경로로 hostname c $를 읽을 수 있다고 생각했지만 일반 디렉토리 클래스에는 다른 서버에 대해 인증 할 수있는 방법이없는 것 같습니다. 나는 이것을 간과하는 쉬운 방법이 있다고 확신하지만, 현재 나는 약간 우연히 발견되었습니다.

도움이 되었습니까?

해결책

에서 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