Ich habe einen .Net Windows-Dienst. Ich möchte ein Installationsprogramm erstellen, um diesen Windows-Dienst zu installieren.
Grundsätzlich muss es Folgendes tun:
installutil.exe
(Wird es benötigt?)installutil.exe
MyService.exeAußerdem möchte ich ein Deinstallationsprogramm bereitstellen, das den folgenden Befehl ausführt:
installutil.exe /u MyService.exe
Wie geht das mit Inno Setup?
Du brauchst nicht installutil.exe
und wahrscheinlich haben Sie nicht einmal das Recht, es weiterzugeben.
So mache ich das in meiner Bewerbung:
using System;
using System.Collections.Generic;
using System.Configuration.Install;
using System.IO;
using System.Linq;
using System.Reflection;
using System.ServiceProcess;
using System.Text;
static void Main(string[] args)
{
if (System.Environment.UserInteractive)
{
string parameter = string.Concat(args);
switch (parameter)
{
case "--install":
ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
break;
case "--uninstall":
ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
break;
}
}
else
{
ServiceBase.Run(new WindowsService());
}
}
Grundsätzlich können Sie Ihren Dienst mit ManagedInstallerClass
wie in meinem Beispiel gezeigt installieren/deinstallieren.
Dann müssen Sie nur noch etwas in Ihr InnoSetup-Skript einfügen:
[Run]
Filename: "{app}\MYSERVICE.EXE"; Parameters: "--install"
[UninstallRun]
Filename: "{app}\MYSERVICE.EXE"; Parameters: "--uninstall"
So habe ich es gemacht:
Exec(ExpandConstant('{dotnet40}\InstallUtil.exe'), ServiceLocation, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Anscheinend hat Inno-Setup die folgenden Konstanten für den Verweis auf den .NET-Ordner auf Ihrem System:
Weitere Informationen verfügbar hier .
Sie können verwenden
Exec(
ExpandConstant('{sys}\sc.exe'),
ExpandConstant('create "MyService" binPath= {app}\MyService.exe start= auto DisplayName= "My Service" obj= LocalSystem'),
'',
SW_HIDE,
ewWaitUntilTerminated,
ResultCode
)
einen Dienst erstellen. Siehe "sc.exe" zum Starten, Beenden, Überprüfen des Dienststatus, Löschen des Dienstes usw.
Wenn Sie vermeiden möchten, dass der Benutzer bei einem Upgrade einen Neustart durchführt, müssen Sie den Dienst beenden, bevor Sie die EXE-Datei kopieren und anschließend neu starten.
Hierfür gibt es einige Skriptfunktionen unter Dienst - Funktionen zum Starten, Beenden, Installieren und Entfernen eines Dienstes