1

.Net 3.5

我已经在服务 exe 中内置了使用 -i 功能自行安装的功能。我有一个自定义安装程序类,并且正在使用在此处在线找到的常用技术。该安装程序类基本上有它自己的服务和服务进程安装程序。

这段代码已经运行了很长时间。最后遇到了Win 7 64位机器,它拒绝安装。

基本上,日志显示它正在安装服务并且成功。然后它尝试创建一个事件日志,但失败了

安装阶段发生异常。System.ComponentModel.Win32Exception:指定的服务已经存在

我刚刚从头开始完全重新安装操作系统,我做的第一件事就是尝试安装为服务,这是同样的错误。为什么认为事件日志已经存在?

我已经阅读了所有其他帖子,并且浏览了我的注册表,但我的服务或事件日志中没有任何内容。我拥有完整的管理员权限,当我尝试以管理员身份打开 cmd 时,它甚至不会提示我,据我所知,我是管理员(我可以在我的用户配置文件中看到)。

我什至添加了代码来检查它是否找到了 EventLog 使用System.Diagnostics.EventLog.SourceExists它确实报告它找到了它,所以我添加了一个调用,System.Diagnostics.EventLog.DeleteEventSource但这没有帮助。

我什至尝试从 中删除 EventLog 安装程序ServiceInstaller,但由于其他原因它开始失败。

有任何想法吗?

这是我尝试过的备用安装程序的一些示例代码,我在这里找到了相同的结果:

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 );
    }
}
4

3 回答 3

1

卸载你的服务

  installutil /u yourproject.exe

重启你的机器

http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=vs.80).aspx

如果您还有问题,请告诉我

于 2012-02-23T21:50:16.900 回答
0

最后,我的问题是我们的内部安装程序。我将其注释掉,现在只需从命令行安装服务,它现在安装在 64 位操作系统上。仍然不知道为什么它以前可以在 32 位上工作。

于 2012-08-24T20:56:04.513 回答
0

如果 exe 仍驻留在磁盘上,请使用 @MicahArmantrout 提到的 installutil 。

否则,以管理员身份打开命令行并执行:sc delete "my service name"

于 2012-02-23T21:56:36.540 回答