你有沒有考慮僅僅複製BAT文件到服務器並與Windows計劃任務運行每隔一小時將其設置(不是最偉大的想法,但似乎你對領導什麼)?
您正在使用的sc
命令實際上可以單獨支持到遠程機器的連接,例如, sc \\REMOTE.COMPUTER start aspnet_state)
。只要執行該命令的用戶有權啓動遠程計算機上的服務(無論如何您都需要這樣做),就可以從任何計算機設置並運行該服務。
只要您從Windows機器上運行此程序,就可以使用JNA進行本機API調用。請參閱下面的例子
例子:
W32ServiceManager manager = new W32ServiceManager("REMOTE.COMPUTER", null);
manager.open(SC_MANAGER_CONNECT);
W32Service aspNetService = manager.openService(
"aspnet_state",
SERVICE_QUERY_STATUS | SERVICE_START
);
if (aspNetService.queryStats().dwCurrentState != SERVICE_RUNNING) {
aspNetServices.startService();
}
aspNetService.close();
編輯
關於你的第一個註釋:提供的憑據登錄到遠程服務器是頗有幾分由於涉及的API更復雜。通常,我只是建議確保您的進程以您想要遠程登錄的用戶身份運行。或者,waffle project有代碼來模擬用戶使用JNA,在NTLM身份驗證的上下文中。這可以擴展到你的案例。 Windows API的關鍵功能是LogonUser
和`ImpersonateLoggedOnUser,它們都已經映射到提供的JNA Advapi32包裝中。要點將是這樣的:
Advapi32.INSTANCE.LogonUser(username, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, handle);
Advapi32.INSTANCE.ImpersonateLoggedOnUser(handle);
// do something as user here...
Advapi32.INSTANCE.RevertToSelf(); // drop the impersonated token
您可能需要調用DuplicateTokenEx在服務調用成功。有關模擬的詳細信息,請參閱鏈接的Microsoft文檔。其中的大部分內容在Advapi32的Javadocs中都是重複的(上面也鏈接過),但是這些文檔並沒有將你與各種功能聯繫起來。
用不着喊每一個重要的詞!這些詞是遠程的,Windows,文件/文件和Java。 –
可能重複http://stackoverflow.com/questions/5757920/how-to-connect-remote-windows-machine-by-java –