문제

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()

두 가지 문제가 있습니다.

  1. 매핑은 사용자 세션에만 사용됩니다. 즉, 효과적으로 서비스에 매핑 된 드라이브를 사용할 수 없습니다. 당신은 그것을 사용해야합니다 길.
  2. 두 번째 문제는 (로컬 시스템 계정 사용) 서비스가 네트워크에 필요한 리소스에 액세스 할 수 없다는 것입니다. 이를 해결하려면 서비스가 폴더에 대한 특정 액세스를 실행하는 '컴퓨터'를 제공하거나 리소스에 액세스 할 수있는 네트워크 (도메인) 계정을 사용하기 위해 서비스를 설정해야합니다.

비밀번호에 속하는 사용자 계정에서 서비스를 실행하고 있습니까? 그만큼 MAP USE Pass /User : OtherUser가 아닌 경우 명령은 현재 사용자를 사용합니다.

"데스크탑과 상호 작용"이 없다면 서비스가 네트워크 드라이브를 매핑 할 수 없다고 생각합니까?

"로컬 시스템"대신 "네트워크 서비스"계정에 따라 서비스를 실행하십시오.

내가 아는 한, 매핑 된 드라이브는 사용자 세션 기간 동안 만 매핑됩니다. Windows 서비스가 시작시 실행 중이거나 사용자 세션의 일부가 아닌 경우 드라이브 매핑이 손실됩니다.

이것은 사실이거나 그렇지 않을 수도 있지만 조사 할 가치가 있습니다. 나는 약 7 년 전에 가지고 있었던 비슷한 시나리오에서 그것에 대해 무언가를 기억합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top