我們寫一個服務,有時候要讓服務啟動某個應用程序,就要修改服務的屬性,勾選允許服務與桌面交互,
可以用修改注冊表實現,我們必須在安裝後操作,所以請重寫Installer的OnAfterInstall。
protected override void OnAfterInstall(System.Collections.IDictionary savedState) {
RegistryKey rk = Registry.LocalMachine;
string key = @"SYSTEM\CurrentControlSet\Services\" + this.sInstaller.ServiceName;
RegistryKey sub = rk.OpenSubKey(key, true);
int value = (int)sub.GetValue("Type");
if (value < 256) {
sub.SetValue("Type", value | 256);
}
base.OnAfterInstall(savedState);
}
但以上方法只能在重啟後起到作用。。。若要想立即生效可以用以下代碼代之,將此方法放入onAfterInstall即可
設置服務與桌面交互
private void SetServiceDesktopInsteract(string serviceName) {
ManagementObject wmiService = new ManagementObject(string.Format("Win32_Service.Name='{0}'",serviceName));
ManagementBaseObject changeMethod = wmiService.GetMethodParameters("Change");
changeMethod["DesktopInteract"] = true;
ManagementBaseObject OutParam = wmiService.InvokeMethod("Change", changeMethod, null);
}
若想立即啟動服務調System.ServiceProcess.ServiceController類來實現
onstart的時候修改注冊表
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\你的服務名]
"Type"=dword:00000010
key value+256
比如現在00000010是16+256=272
16精制就是00000110
C#允許服務與桌面交互的實現操作:直接操作“管理工具”下的“服務”也行:
C#允許服務與桌面交互的具體實現步驟就向你介紹到這裡,希望對你學習和理解C#允許服務與桌面交互有所幫助。