Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows服务问题_C#_Windows Services_Installation - Fatal编程技术网

C# Windows服务问题

C# Windows服务问题,c#,windows-services,installation,C#,Windows Services,Installation,我有3个Windows服务问题 WS可以在后台工作吗?有可能每两分钟做一次工作吗?(如果是,我能得到一些帮助吗?) 如何以简单的方式安装WS?(不适用于Installutil.exe……) 如何从Windows服务运行.exe文件 我试过这样做: System.Diagnostics.Process G = new Process(); G.StartInfo.FileName = @"d:\demo.exe"; G.Start(); 但它不起作用。 是,使用类() insta

我有3个Windows服务问题

  • WS可以在后台工作吗?有可能每两分钟做一次工作吗?(如果是,我能得到一些帮助吗?)

  • 如何以简单的方式安装WS?(不适用于Installutil.exe……)

  • 如何从Windows服务运行.exe文件

  • 我试过这样做:

    System.Diagnostics.Process G = new Process();
        G.StartInfo.FileName = @"d:\demo.exe";
        G.Start();
    
    但它不起作用。

    • 是,使用类()

    • installutil.exe有什么问题?如果您不喜欢,请使用VS.NET生成一个安装程序,但installutil.exe据我所知,它总是在后台。(,)


    • 默认情况下,Windows服务应在后台工作。他们希望在启动后立即将控制权返回给服务管理器,因此通常您会启动一个线程来处理您的服务任务

      也就是说,System.Threading.Timer类应该可以很好地启动定时运行的计时器

      至于安装,您应该使用Installutil.exe-这是安装Windows服务的标准方法


      我建议大家看看它有一个好的,干净的模板,你可以使用。此外,还有一个批处理文件示例,用于简化Installutil的使用,这可能会使它对您更“友好”。

      如果您使用VS2008进行开发,则可以使用一个模板来创建Windows服务

      基本上,您将创建一个计时器(System.Windows.Timers.Timer),在OnStart方法上执行初始化,在OnStop方法上执行清理和完成工作,并初始化计时器(在OnStart上,或使用OnCommand)

      您可以在这里查看一个或多个示例

      对于安装,除了其他答案中的选项外,还可以创建安装程序项目,再次检查模板项目

    • 是的,windows服务可以并且确实在后台工作。要每2分钟做一次相同的工作,请使用system.Timer类,并将代码放入OneLassed事件中。我最近创建了这种类型的服务,发现您可以使用两种类型的计时器,请确保使用正确的计时器,否则将找不到OneFassed事件

    • 我没有尝试在没有InstallUtil.exe的情况下进行安装,但我确实有一个.bat文件,作为我的主应用程序安装的一部分运行

    • 关于从Windows服务运行.exe的后续问题,要从我使用过的Windows服务运行.exe,请执行以下操作:

      Process p = new Process();
      p.StartInfo.WorkingDirectory = @"C:\";
      p.StartInfo.FileName = @"C:\demo.exe";
      p.StartInfo.CreateNoWindow = true;
      p.Start();
      p.WaitForExit();
      

      请记住,可执行文件将在与服务相同的级别上运行,这意味着它不能在桌面上显示任何内容。如果您希望看到任何窗口打开或.exe需要任何用户输入,则您会失望,并且.exe可能会无限期等待。(我发现这个链接很有帮助,所以也有这个问题-

      你也可以使用sc.exe作为服务安装你的应用程序,但它与InstallUtil.exe的安装差别不大。它确实从命令行提供了对服务的更多控制


      另外,只要在命令提示符下运行sc,就可以显示可能的命令。

      另一种想法是,如果创建服务太难,您可以安排每两分钟运行一次任务