하나의 맵 네트워크는 Windows 서비스에서 어떻게 드러나나요?
-
16-09-2019 - |
문제
Windows Service에서 네트워크 드라이브를 매핑하려고합니다. 다음 명령을 실행하기 위해 배치 파일을 사용합니다.
NET USE U: \\192.168.55.6\folder password
서비스 생성자 또는 OnStart 이벤트에서 배치 파일을 실행하는 동안 드라이브가 매핑되지 않습니까?
Process process = new Process();
process.StartInfo.FileName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\MAP.BAT";
process.StartInfo.CreateNoWindow = false;
process.Start();
하나의 맵 네트워크는 Windows 서비스에서 어떻게 드러나나요?
해결책 2
사용하여 해결 된 모든 문제 MAP 네트워크 드라이브 (API) 네트워크 드라이브를 매핑합니다. Onstart 서비스 이벤트 중에 필요한 드라이브를 매핑합니다.
다른 팁
Windows 스크립트 호스트 객체 모델에 대한 참조를 사용하여 달성 할 수 있습니다.
com 참조를 추가하십시오 Windows 스크립트 호스트 객체 모델 참조 섹션에 IWSHRUNTIMELIBRARY 항목을 추가합니다. 이제 다음 코드를 사용하여 드라이브를 매핑 할 수 있습니다.
using IWshRuntimeLibrary;
IWshNetwork_Class network = new IWshNetwork_Class();
network.MapNetworkDrive("k:",@"\\192.168.20.35\MyShare", Type.Missing, "user1", "password1");
다음 코드를 사용하여 매핑을 맵핑하거나 제거 할 수 있습니다.
network.RemoveNetworkDrive("k:");
자세한 단계를 문서화했습니다 여기
배치 파일을 호출하여 다른 실행 파일을 호출하는 대신 올바른 API 기능을 호출하는 것이 좋습니다. 당신이 찾고있는 기능은입니다 DefineDosDevice()
두 가지 문제가 있습니다.
- 매핑은 사용자 세션에만 사용됩니다. 즉, 효과적으로 서비스에 매핑 된 드라이브를 사용할 수 없습니다. 당신은 그것을 사용해야합니다 UNC 길.
- 두 번째 문제는 (로컬 시스템 계정 사용) 서비스가 네트워크에 필요한 리소스에 액세스 할 수 없다는 것입니다. 이를 해결하려면 서비스가 폴더에 대한 특정 액세스를 실행하는 '컴퓨터'를 제공하거나 리소스에 액세스 할 수있는 네트워크 (도메인) 계정을 사용하기 위해 서비스를 설정해야합니다.
비밀번호에 속하는 사용자 계정에서 서비스를 실행하고 있습니까? 그만큼 MAP USE
Pass /User : OtherUser가 아닌 경우 명령은 현재 사용자를 사용합니다.
"데스크탑과 상호 작용"이 없다면 서비스가 네트워크 드라이브를 매핑 할 수 없다고 생각합니까?
"로컬 시스템"대신 "네트워크 서비스"계정에 따라 서비스를 실행하십시오.
내가 아는 한, 매핑 된 드라이브는 사용자 세션 기간 동안 만 매핑됩니다. Windows 서비스가 시작시 실행 중이거나 사용자 세션의 일부가 아닌 경우 드라이브 매핑이 손실됩니다.
이것은 사실이거나 그렇지 않을 수도 있지만 조사 할 가치가 있습니다. 나는 약 7 년 전에 가지고 있었던 비슷한 시나리오에서 그것에 대해 무언가를 기억합니다.