2010-11-21 2 views
1

서비스를 원격으로 만들어야하고 명령을 실행하지 않고 "sc \ remotemachine create ......"를 실행하고 C# 코드 내에서 수행하려고합니다.RPC 서버를 사용할 수 없습니다. ManagementScope.Connect를 호출 할 때

그러나 sc 명령이 매우 행복하게 작동하고 원격 시스템을 관리하는 경우에도 코드를 실행하면 ManagementScope.Connect 호출에서 "RPC 서버를 사용할 수 없습니다."와 함께 예외가 발생합니다. 이것이 내가 조금 다음에 갈 곳으로 붙어있어 여행의 첫 번째 단계에 대해 같이

이 작업을 수행하는 코드의 조각은

string machineName = "othermachine"; 
string path = string.Format(@"\\{0}\root\cimv2", machineName); 
ManagementScope scope = new ManagementScope(path); 
scope.Connect(); 

입니다. SC는 명령 작품, 그래서 다른 무엇을하고 있는지 (.NET 라이브러리를 사용하지 않는 이외의 - 어쩌면 내가 세게 WINAPI를 칠 필요?)

감사

+0

온 전성 체크 : root/cimv2가 아닌'othermachine'에만 연결을 시도 했습니까? – MPelletier

답변

2

이 작업에 할당 된 시간이 지나가고있는 것을 보면서 잠시 생각해 본 후에 구식 WIN32 API 설명서를 얻었고 "DllImport"에게 "이전 방식으로"필요한 작업을 수행했습니다. 나이 든 C 개 였기 때문에 나는이 호출들에 대한 나의 길을 알고있었습니다. 관리 라이브러리를 꽤 오랜 기간 사용해도 얼마나 많은 돈이 되돌아 왔는지 놀랍습니다.

내가해야 할 일은 servcie를 만들고, 시작하고, 유용한 일을하고, 멈추고, 삭제할 수 있어야한다는 것입니다. 생성, 시작, 중지 및 삭제는 메커니즘이며 나는 활동의 "유용한 일"부분에 집중하고자했습니다.

먼저 서비스의 exe를 ADMIN $ 공유에 복사하고 로컬 경로를 확인했습니다 (우리 서버 관리자는 아무 말도하지 않습니다!). 그때

["netapi32.dll"]NetShareGetInfo 

및 전화 이렇게하려면 내가 사용과 다음에서 advapi32.dll의

  • OpenSCManager
  • CreateService에 나는 중지 할 경우에 대한
  • StartService
  • 오픈 서비스 (및 그것을 지우십시오 - 이것은 핸들을 열어 두지 마십시오. 이것은 시간이 걸릴 수 있으므로 청결한 상태로 유지하십시오)
  • Co ntrolService
  • QueryServiceStatus
  • CloseServiceHandle는

이 모든 심지어 VPN 연결을 통해 작동합니다.

관리되는 API가 실제로 필요한 것보다 훨씬 더 많이 노력하고 있다고 추측 할 수 있습니다. 관리되는 API와 Windows API를 사용하는 데 소요되는 시간의 차이가 상당하기 때문에 관리되는 API가 그것을 통해 얻을 적절한 방법이 아니었다.

+0

해결 방법에 대한 좋은 생각. 이 상황은 VPN 문제 일 뿐이므로 전체 질문을 변경합니다 .... – MPelletier

+0

어제 사무실에 와서 코드가 작동했는데 그 전에는 저녁이 없었습니다. 차이점은 주니퍼 VPN 연결뿐이었습니다. –

0

을 분명히 MSDN에서 주식 코드는 페인트하지 않습니다 전체 그림. 나는 너와 같은 결과를 얻는다.

이 녀석을 확인하십시오. did.

편집 :

나는 당신이 바로, 작업 그룹 및 도메인이 아닌 그것을 시도하고 생각? 그 트릭입니다, 작업 그룹은 좀 더 많은 작업을 요구합니다. 위의 링크는 해결 방법이있는 것 같습니다. 나는 오늘 밤 집에서 다시 시험 할 것이다.

+0

아니요, 도메인입니다. 이 코드는 사무실의 LAN에 직접 연결되어 있지만 일주일에 2 일 정도면 작동합니다. 나머지 시간은 VPN 연결을 통해 연결되었으며 해당 링크를 통해 코드가 작동하지 않습니다. SC와 PSEXEC 모두 근본적인 차이점이 있다고 믿을 수있게 해주는 두 곳에서 잘 작동합니다. - 아래의 게시물을 참조하십시오 ... –

+0

솔직히 말해서 RPC 액세스가 거부되었으므로 다른 예외가 있습니다. 제대로, 만약 내가 부인할 수 있다면. – MPelletier

관련 문제