日期:2014-05-17  浏览次数:21136 次

C#Windows 服务制作安装删除. 用户注销后,程序继续运行
  最近写了一个程序,需要在服务器上运行,编完了以后,到服务器运行,发现,用远程登陆打开这个程序,没有问题,可是过了十分钟,远程服务器自动注销了,程序也就终止。这样,程序就不能正常工作。想了一天多的办法,终于在今天把这个问题解决了。

首先用.net写个服务

             新建一个服务,在设计页面上点右键,出现菜单后,选择添加安装程序。这时会出现一个新的页面,页面上有个控件 serviceProcessInstaller1和serviceInstaller1

在 serviceProcessInstaller1中把属性Account改为LocalSystem

在把serviceInstaller1中把属性Parent 改为serviceProcessInstaller1    ServiceName属性是管生成服务后的名子(设名子为gogo)

把这个控件的属性改完以后。回到新建的服务页的后台,添加以下代码:

Process p = new Process();
            p.StartInfo.FileName = "程序的路径和文件名";
            p.Start();

添加完成之后,生成一下(假设名为W2.exe)。到相应的文件夹找到生成的exe文件,找到时会发现有两个.exe用名子比较短的那个。把这个文件拷到一个好记的文件夹中如F盘根目录。

这时就是要把个服务安装一下。进入cmd中的画面,进入Framework2.0的文件如:

cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

后在打

InstallUtil  f:\w2.exe   这个就安装了服务 卸载服务是 InstallUtil  f:\w2.exe  -u

现在就剩启动服务了

net start gogo  这样这个服务就启动,这个服务打开了,我就运行的程序,打开我所需要程序是用以系统用户打开的,这样就不会因注销用户而结束我需要的程序,这时在把gogo这个服务结束就行了,因为它只是起了一个过渡的作用,为服务器省要一点资源。
1 楼 darkgost 2012-07-12  
您好,我按照你的方法,在Service1.cs中添加如下代码:
protected override void OnStart(string[] args)
        {
            Process p = new Process();
            p.StartInfo.FileName = "D:\\helloworld.exe";
            p.Start();
        }

由于helloworld.exe(功能:启动后会在一定时间将字符串“Helloworld”写入指定文件,并在界面显示)是winform程序,我在任务管理器中看到了该程序的进程,但程序并没有执行?请问是什么原因造成的呢?