簡體   English   中英

如何在windows服務安裝時默認勾選“允許服務與桌面交互”

[英]How to keep "Allow Service to interact with desktop" checked by default at the time of windows service installation

我創建了一個 Windows 服務,它應該打開並運行 ABC.exe 應用程序。 我知道這樣做是一種不好的做法,不要因為這個原因而拒絕投票,因為我目前沒有任何其他選擇。 我對此進行了大量研究,並發現了一種解決方法,使其具有交互性。我使用了此鏈接: https : //code.msdn.microsoft.com/windowsapps/CSCreateProcessAsUserFromSe-b682134e但我現在面臨的問題是用戶必須手動設置本地系統帳戶並選中“允許服務與桌面交互”框。 我現在想要做的就是在安裝時默認選中它。 所以當用戶安裝服務時,它應該已經被檢查並且服務應該處於運行狀態(不必手動啟動服務 - 我已經完成了這部分)。 我在這里看到了一些類似的帖子,但它們都展示了從外部應用程序啟動服務的方法,例如創建另一個控制台應用程序和使用 system.management.managementobject。 我想知道是否有任何方法可以在服務本身中添加一些代碼以及在哪里添加? ps.:我正在為 windows vista+ 系統創建此服務。

請幫助我解決這個問題很長一段時間。 提前致謝。

我建議你做的是直接在注冊表中修改值

在安裝程序類中,覆蓋OnCommitted(System.Collections.IDictionary savedState)方法。

在該方法中,修改確保此設置的注冊表項,如下所示:

protected override void OnCommitted(System.Collections.IDictionary savedState)
{
  base.OnCommitted(savedState);
  string regKey = "SYSTEM\\CurrentControlSet\\Services\\MyServiceName";
  var key = Registry.LocalMachine.OpenSubKey(regKey, RegistryKeyPermissionCheck.ReadWriteSubTree)
          ?? Registry.LocalMachine.CreateSubKey(regKey, RegistryKeyPermissionCheck.ReadWriteSubTree);

 // might need to check the result, should be hex 110 or Decimal 272
 key.SetValue("Type", 272, RegistryValueKind.DWord); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM