.Net 3.5
我已经在服务exe中内置了使用-i功能安装自己的能力。我有一个自定义安装程序类,我在网上找到了一个常用的技术。该安装程序类基本上拥有自己的服务和服务流程安装程序。
此代码在很长一段时间内都运行良好。最后遇到了Win 7 64位机器,它拒绝安装。
基本上,日志显示它正在安装服务并且成功。然后它尝试创建一个事件日志,但失败并带有
安装阶段发生异常。 System.ComponentModel.Win32Exception:已经指定的服务 存在
我刚刚从头开始完全重新安装操作系统,我做的第一件事是尝试安装作为服务,这是同样的错误。为什么它认为事件日志已经存在?
我已经阅读了所有其他帖子,我浏览了我的注册表,但我的服务或事件日志中没有任何内容。我有完全的管理员权限,当我尝试以管理员身份打开cmd时,它甚至没有提示我,所以据我所知,我是一名管理员(我可以在我的用户个人资料中看到)。
我甚至添加了代码来检查它是否找到了使用System.Diagnostics.EventLog.SourceExists
报告它发现它的EventLog,因此我添加了对System.Diagnostics.EventLog.DeleteEventSource
的调用,但这没有用。
我甚至尝试从ServiceInstaller
删除EventLog安装程序,但由于其他原因它开始失败。
有什么想法吗?
以下是我尝试的备用安装程序的示例代码,我发现here具有相同的结果:
public partial class Service1Installer : Installer
{
public Service1Installer()
{
InitializeComponent();
ServiceProcessInstaller process = new ServiceProcessInstaller();
process.Account = ServiceAccount.LocalSystem;
ServiceInstaller serviceAdmin = new ServiceInstaller();
serviceAdmin.StartType = ServiceStartMode.Manual;
serviceAdmin.ServiceName = "Service1";
serviceAdmin.DisplayName = "Service1";
serviceAdmin.Description = "Service1";
Installers.Add(serviceAdmin);
Installers.Add(process );
}
}
答案 0 :(得分:1)
卸载您的服务
installutil /u yourproject.exe
重启你的机器
http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=vs.80).aspx
如果您还有问题,请告诉我
答案 1 :(得分:0)
如果exe仍然驻留在磁盘上,请使用installutil作为@MicahArmantrout提及。
否则,以管理员身份打开命令行并执行:sc delete "my service name"
答案 2 :(得分:0)
最后,我的问题是我们的内部安装程序。我评论了它,现在只需从命令行安装服务,它现在安装在64位操作系统上。仍然不知道为什么它会在32位之前发挥作用。