WMI를 사용하고 네트워크 공유에 액세스해야하는 C# exe가 있습니다. 그러나 공유에 액세스하면 UnauthorizedAccessException이 발생합니다. exe를 직접 실행하면 공유에 액세스 할 수 있습니다. 두 경우 모두 동일한 사용자 계정을 사용하고 있습니다.WMI에서 exe를 실행할 때 네트워크 인증
내 응용 프로그램에는 로컬 PC에서 실행되는 GUI 클라이언트와 원격 PC에서 실행되는 백엔드 프로세스의 두 부분이 있습니다. 클라이언트가 백엔드에 연결해야하는 경우 먼저 WMI (아래에 재현 된 코드)를 사용하여 원격 프로세스를 시작합니다. 원격 프로세스는 Directory.GetDirectories()를 사용하여 네트워크 공유에 액세스하는 등 여러 가지 작업을 수행하고 클라이언트에 다시보고합니다.
WMI를 사용하는 클라이언트가 원격 프로세스를 자동으로 시작하면 네트워크 공유에 액세스 할 수 없습니다. 그러나 원격 데스크톱을 사용하여 원격 컴퓨터에 연결하고 수동으로 백 엔드 프로세스를 시작하면 네트워크 공유에 대한 액세스가 성공합니다.
WMI 호출에서 지정한 사용자와 원격 데스크톱 세션에 로그인 한 사용자가 동일하므로 사용 권한이 동일해야합니까? 그렇지 않아야합니까? 이 상태 내가 Directory.Exists()에 대한 MSDN 항목에서 볼
"는이 방법은 네트워크 인증을 수행하지 않습니다 존재합니다. 사전 인증없이 기존 네트워크 공유를 조회하는 경우,이 메소드는 false를 돌려줍니다 존재한다." 이게 관련이 있다고 생각 하나? WMI 세션에서 사용자가 올바르게 인증되도록하려면 어떻게해야합니까?
ConnectionOptions opts = new ConnectionOptions();
opts.Username = username;
opts.Password = password;
ManagementPath path = new ManagementPath(string.Format("\\\\{0}\\root\\cimv2:Win32_Process", remoteHost));
ManagementScope scope = new ManagementScope(path, opts);
scope.Connect();
ObjectGetOptions getOpts = new ObjectGetOptions();
using (ManagementClass mngClass = new ManagementClass(scope, path, getOpts))
{
ManagementBaseObject inParams = mngClass.GetMethodParameters("Create");
inParams["CommandLine"] = commandLine;
ManagementBaseObject outParams = mngClass.InvokeMethod("Create", inParams, null);
}
비슷한 문제 http://stackoverflow.com/questions/2291921/c-wmi-runs-an-exe-on-a-remote-computer-that-then-runs-another-exe-on-the- same-co/2291991 # 2291991 – lsalamon
고마워, 내 검색 결과가 표시되지 않았다. 나는 그것을 읽었을 것이고 그것이 도움이되는지 알 것이다. – Andy
사용자를 추가하고 풀 퍼미션을 제공했지만 차이는 없습니다. ( – Andy