2012-11-14 45 views
0

我正在嘗試製作一個工具,該工具將通過批處理文件和自定義服務的組合在另一臺PC上啓動應用程序。Microsoft服務中的參數

目前,我的程序只運行一個按鈕命中的特定程序。當我點擊按鈕(保存在一個winform中)時,它會開始一個批處理文件,運行在我的目標PC上找到的exe文件。像這樣:

// when the service starts open paint 
    protected override void OnStart(string[] args) 
    { 


     // name of the application to launch 
     String applicationName = "C:\\TargetFolder\\Target.exe"; 

     // launch the application 
     ApplicationLoader.PROCESS_INFORMATION procInfo; 
     ApplicationLoader.StartProcessAndBypassUAC(applicationName, out procInfo); 
    } 

然後當我打的關閉按鈕,出現這種情況

// when the service is stopped close the client 
    protected override void OnStop() 
    { 


     // name of the application to launch 
     String batchFile = "C:\\BatchFiles\\KillClient.bat"; 


     // launch the application 
     ApplicationLoader.PROCESS_INFORMATION procInfo; 
     ApplicationLoader.StartProcessAndBypassUAC(batchFile, out procInfo); 
    } 

我的winform運行這個批處理文件:

@echo off 
net start "MyNewService" 

不過現在,我試圖讓我的原始工具根據按鈕打開特定的exes,而不需要使X數量更多的服務。誰的唯一工作就是運行這個單一的exe。

例如,如果我想讓一個按鈕上色,另一個關閉它,另一個打開單詞,最後一個關閉它。我將如何在服務中這樣做?

+0

聽起來像是一個PowerShell遠程處理作業... –

+0

我認爲你需要在自己的頭腦中更清楚需求是什麼 - 爲什麼要使用批處理文件?你爲什麼要使用服務?爲什麼不能使用RDP? –

回答

1

對於具有UI且需要用戶交互的程序,您不使用服務。

服務是指在沒有任何人爲干預的情況下在後檯安靜地運行的程序(除了可能啓動和停止它)。

如果您想要人機交互,您需要編寫常規Windows應用程序(WinForms,WPF,...)。

+0

它通過網絡。我所有的互動都只是運行這項服務。用戶沒有直接使用它。我所有的UI都會打開或關閉它。 我只是想知道如果我可以讓我的服務通過按下按鈕來打開和關閉特定的exe文件。 – N0xus

+0

@ Nxxus - 服務沒有UI。無論是否通過網絡都無關緊要。 – ChrisF

+0

我明白了,但仍然可以通過控制面板打開和關閉服務。我的工具不需要進入控制面板來啓動和停止此過程。 我的服務沒有直接的用戶界面。我製作了一個winform,無需進入控制面板即可打開或關閉此過程。 – N0xus

0

您需要仔細考慮上面Chris提供的答案,因爲近年來在加強Windows操作系統安全性方面進行了大量努力。 Vista中出現的一個變化(我稱之爲最近的:))是現在的服務以'User0'運行,而不是'User1'。 User0無權訪問屏幕。

你試圖做的是繞過安全。我上面說過 - 考慮當沒有用戶登錄到目標機器時會發生什麼,但是如果MANY用戶有活動會話,你也可以考慮你想要發生什麼。在我看來,你需要回溯一點,並更緊密地制定需求。

如前所述,您的問題標題詢問如何將參數傳遞給Windows服務。 2個回答映入腦海 -

  1. 你也許可以實現服務作爲一個WCF服務(而不是Windows服務),這將允許您定義接收要傳遞的參數的方法。 WCF也有多種不同方式的靈活性。因此,這可能會解決克里斯和我提出的一些問題;在特定用戶登錄時運行的控制檯主機可能對您的特定問題更有意義。你也可以在Windows服務中託管你的WCF服務 - 我在上面提到的所有保留中提到了這一點。

  2. 您可以實現打開偵聽套接字的Windows(NT)服務。您的啓動器應用程序通過套接字對話連接並傳遞參數。

無疑還有其他方法。