我正在尝试安装Windows服务,然后再启动它。我不明白为什么经过几个周期(安装+卸载)后,我仍然无法安装或卸载该服务,因为出现错误:
已经安装了该产品的另一个版本
但是该服务不再显示在Services
窗口中,安装程序也不再显示在Programs
部分中。
如果我尝试卸载,我会得到:
错误1001:卸载时发生异常。此异常 将被忽略,卸载将继续。但是,卸载 uininstall完成后,可能无法完全卸载。
我不明白我在做什么错。 我已将项目输出添加到所有自定义操作中:
-Install
-Uninstall
-Commit
-Rollback
应该如何执行全新安装/卸载?
安装程序代码
[RunInstaller(true)]
public partial class ProjectInstaller : Installer {
public ProjectInstaller() {
InitializeComponent();
this.AfterInstall += ProjectInstaller_AfterInstall;
this.BeforeUninstall += ProjectInstaller_BeforeUninstall;
}
private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e) {
StartService();
}
private void ProjectInstaller_BeforeUninstall(object sender, InstallEventArgs e) {
StopService();
}
private void StartService() {
Debugger.Launch();
bool isAdmin = IsAdmin();
if (isAdmin) {
using (ServiceController controller = new ServiceController(serviceInstaller1.ServiceName)) {
controller.Start();
}
} else {
ProcessStartInfo info = new ProcessStartInfo {
Verb = "runas",
FileName = "net",
Arguments = $"start {serviceInstaller1.ServiceName}"
};
Process.Start(info);
}
}
private void StopService() {
bool isAdmin = IsAdmin();
if (isAdmin) {
using (ServiceController controller = new ServiceController(serviceInstaller1.ServiceName)) {
controller.Stop();
}
} else {
ProcessStartInfo info = new ProcessStartInfo {
Verb = "runas",
FileName = "net",
Arguments = $"stop {serviceInstaller1.ServiceName}"
};
Process.Start(info);
}
}
private static bool IsAdmin() {
var identity = WindowsIdentity.GetCurrent();
var princ = new WindowsPrincipal(identity);
return princ.IsInRole(WindowsBuiltInRole.Administrator);
}
}
答案 0 :(得分:0)
TEMP :
Adding this answer, not sure it is relevant until we hear more comments from OP
。
自定义操作 :MSI具有内置的机制,可以
start
/stop
和install
/uninstall
服务,它们非常可靠。这些涉及填充许多标准MSI表。使用自定义操作可能会触发您所描述的难以调试和解决的问题。
部署工具 :您使用的是什么工具?
WiX工具集 :WiX是一种免费的开放源代码替代品,您可以检查其他几种主要的部署工具。 Advanced Installer具有一些免费功能,但我认为其中不包括服务安装。虽然值得测试-不错的功能。 Installshield没有我所知道的免费版本,但是功能齐全。 PACE套件是新手。我会全部测试并选择一个-仅2美分。
WiX:服务安装示例 :
WiXSamples - github.com/rstropek
看一下WiX标记示例。请检查ServiceControl element
。