将Windows应用程序转换为Windows服务时出现问题

时间:2015-01-27 18:40:47

标签: windows service

我创建了一个监控实用程序,用于检查cpu,ram,驱动器空间统计信息和电子邮件(如果使用率超过设置阈值)。它在系统托盘中运行良好但我意识到当我退出Windows服务器时exe将停止。这让我相信我需要创建一个Windows服务。我想使用现有的GUI表单将数据保存到应用程序设置,并在Windows服务中使用这些设置。以下是我到目前为止采取的步骤,

  1. 添加了Windows服务类。
  2. 修改原始代码以删除与GUI Form相关的任何交互式项目。
  3. 在此课程中添加了代码。
  4. 添加了服务安装程序。
  5. 将此代码添加到其中 - >
  6. public ProjectInstaller()    
    {      
        InitializeComponent();
    
        ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
    
        ServiceInstaller serviceInstaller = new ServiceInstaller();
    
        serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
    
        serviceProcessInstaller.Username = null;
    
        serviceProcessInstaller.Password = null;
    
        serviceInstaller.StartType = ServiceStartMode.Automatic;
    
        serviceInstaller.ServiceName = "Server Monitoring";
    
        this.Installers.Add(serviceProcessInstaller);
    
        this.Installers.Add(serviceInstaller);      
    }
    
    1. 将启动对象更改为Utility.Program。
    2. 当我尝试通过installUtil安装时,我收到此错误

      System.IO.FileNotFoundException:无法加载文件或程序集'file:/// C:\ Use rs \ AdminUser \ Desktop \ Temp \ Server'或其依赖项之一。系统不能 找到指定的文件..

      谢谢!

1 个答案:

答案 0 :(得分:0)

如果要将这些应用程序设置保存到与Windows服务位于同一目录中的文件中,那将是您的问题。 所有Windows服务都在C:/ Windows目录(或其中的子目录)中运行,因此当您访问文件时,您需要执行以下两项操作之一:

更改执行目录

您可以使用以下代码行将正在执行的应用程序的“当前目录”更改回包含该exe的文件夹:

  

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

这将使所有相关文件再次相对于可执行位置。

使所有文件请求完整路径

这个文件比其他文件更容易。系统文件是最难的。因此,如果您想要访问.config文件,那将是一场噩梦。