2010-11-21 64 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

完整性檢查:您是否嘗試連接到'othermachine',而不是root/cimv2? – MPelletier 2010-11-21 23:34:20

回答

2

想了一會兒,看到分配給這個任務的時間被腐蝕掉了,我得到了舊的WIN32 api文檔,並且[DllImport]'編輯了我需要的這些「老式的方法」。作爲一個老式的C狗,我曾經知道我圍繞這些調用的方式,即使在使用託管庫幾年後,驚人的數量也會回來。

我需要做的是能夠創建一個servcie,啓動它,做有用的工作,停止它並刪除它。創建,啓動,停止和刪除是機制,我想專注於活動的「做有用的工作」部分。

我首先將該服務的exe複製到ADMIN $共享中,並驗證了本地路徑(與我們的服務器管理員不同)。爲此,我呼籲

["netapi32.dll"]NetShareGetInfo 

,然後我用下面從ADVAPI32.DLL

  • OpenSCManager
  • 的CreateService
  • StartService
  • OpenService(因爲當我想停下來,刪除它 - 不要保持把手打開,因爲這可能需要一段時間,以保持自我包裝更清潔)
  • Co ntrolService
  • QueryServiceStatus
  • CloseServiceHandle

這一切工作,甚至通過VPN連接。

我只能猜測被管理的api試圖做得比我實際需要的多得多 - 使用託管api和Windows api所花費的時間差異相當多,並且不保證託管api將會通過它是不合適的前進方向。

+0

解決方法的想法很好。這種情況改變了整個問題,現在這是一個VPN問題。...... – MPelletier 2010-11-23 12:09:05

+0

昨天我在辦公室並且我的代碼工作後,它才真正變得清晰起來,它不在前一天晚上。 Juniper VPN連接唯一不同。 – 2010-11-23 16:26:39

0

顯然從MSDN股票代碼不搽整個圖片。我得到和你一樣的結果。

看看這個傢伙did

編輯:

我相信你想它在一個工作組,而不是一個域,對不對?這就是訣竅,工作組需要更多的工作來完成。上面的鏈接似乎有一個解決方法。今晚我會在家裏再次嘗試。

+0

不,我在一個域中。如果我直接連接到辦公室的局域網,這個代碼就可以工作,但是這一天只有兩天。剩下的時間我通過VPN連接進行連接,並且代碼無法通過該鏈接進行操作。 SC和PSEXEC在這兩個地方都能正常工作,這使我相信它們之間存在根本的區別 - 但請參閱下面的文章... – 2010-11-23 09:40:56

+0

說實話,我得到了另一個異常,RPC訪問被拒絕,我想這意味着至少有一些工作如果我能得到儘可能遠的效果,那麼這是正確的。 – MPelletier 2010-11-23 12:11:05

相關問題