1

我正在尝试构建一个可自行安装的 Windows 服务。我有一个这样定义的安装程序类:

[RunInstaller(true)]
public class MyServiceInstaller : Installer
{
    public MyServiceInstaller()
    {
        var serviceProcessInstaller = new ServiceProcessInstaller
            {
                Account = ServiceAccount.LocalSystem
            };

        var serviceInstaller = new ServiceInstaller
            {
                DisplayName = "MyService",
                StartType = ServiceStartMode.Automatic,
                ServiceName = "MyService",
                Description = "My Service Description"
            };

        Installers.Add(serviceProcessInstaller);
        Installers.Add(serviceInstaller);
    }
}

这是我用来执行安装的代码:

public void Install()
{
    using (var assemblyInstaller = new AssemblyInstaller(
      typeof(MyService).Assembly, 
      null) { 
        UseNewContext = true 
      })
    {
        var state = new Hashtable();
        try
        {
            assemblyInstaller.Install(state);
            assemblyInstaller.Commit(state);
        }
        catch
        {
            try
            {
                assemblyInstaller.Rollback(state);
            }
            catch {}

            throw;
        }
    }
}

当我从我的 ASP.NET 应用程序触发安装时,包含我的 Windows 服务的程序集安装在某处:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\xxxxxxx\25c14c59\a945a1e6\assembly\dl3\abf52138\74461ad8_8d5bce01\MyService.EXE

问题是,这个程序集是唯一安装的文件。

问题:

  1. 我如何还包括我的程序集所依赖的程序集?
  2. 如何还包括我的 app.config 文件?
4

1 回答 1

0

通过根本不使用安装程序解决了这个问题。相反,我使用 WMI ( Win32_Service) 来注册我的服务,然后它就从原始位置运行。这是 codeproject 上的相关文章

于 2013-07-12T09:40:40.990 回答