2010-11-23 6 views
0

hinzu Ich habe ein Programm, das als Desktop-Anwendung ausgeführt wird, aber auch als Windows-Dienst installiert werden kann. Die Installation erfolgt über die Schaltfläche "Als Dienst installieren" in der GUI. Der Event-Handler für diese Schaltfläche sieht wie folgt aus:Installieren Sie den Dienst und fügen Sie den Registrierungseintrag unter Vista +

ProcessStartInfo psi = new ProcessStartInfo("sc", "description " + 
    this.ServiceName + " \"" + 
     ((AssemblyDescriptionAttribute)attributes[0]).Description + "\"") 
psi.CreateNoWindow = true; 
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
psi.Verb = "runas"; 
Process.Start(psi).WaitForExit();  

Was Ich mag würde jetzt zu tun ist, einige zusätzliche Registrierungseinträge unter Mitsprache hinzuzufügen:

HKLM\SOFTWARE\MyCompany\Services 

die auch erhöhte Privilegien benötigt. Aber wenn ich die gleiche Prozedur wie oben beschrieben mit dem Befehl "REG ADD" benutze, würde der UAC Dialog mehr als einmal erscheinen - und das will ich nicht.

Also, was ist der beste Weg, um einen Windows-Dienst zu installieren und einen Registrierungseintrag unter HKLM mit nur die UAC-Eingabeaufforderung einmal hinzuzufügen?

Antwort

0

Am Ende habe ich mich mit Admin-Privilegien und einem speziellen Parameter myprogram.exe -i angerufen und verzweige dann in eine spezielle Methode, die die ServiceInstaller-Klasse verwendet, um das Programm als Dienst zu installieren (statt SC aufzurufen).

1

Erstellen Sie eine kleine exe oder eine Batch-Datei, die beide Dinge (das sc und das reg-Update) tut. Starten Sie , dass anstelle von sc.

+0

Danke für Ihre Antwort. Dies scheint die offensichtliche Lösung zu sein, aber ich möchte das vermeiden, weil der Code in einer gemeinsam genutzten Bibliothek ist. Es würde die Bereitstellung erschweren, wenn ich mich auf eine zusätzliche Komponente wie eine Batch-Datei oder eine Exe verlassen müsste. – Jeldrik

1

Wie für die Installation Service.
Sie können versuchen topshelf. Es ist einfach zu bedienen und sehr leistungsstark.