如何在Windows服务启动的GUI程序

如何在Windows服务启动的GUI程序,第1张

关键代码

31 获取系统注销信息

方法:通过与MicrosoftWin32SessionEndingEventHandler建关关联获取系统注销信息

protected override void OnStart(string[] args)

{

//获取系统注销,关机

MicrosoftWin32SystemEventsSessionEnding += new MicrosoftWin32SessionEndingEventHandler(thisSystemEvents_SessionEnding);

}

protected override void OnStop()

{

// TODO: 在此处添加代码以执行停止服务所需的关闭 *** 作。

//切记在服务停止时,移除事件

MicrosoftWin32SystemEventsSessionEnding -= new MicrosoftWin32SessionEndingEventHandler(thisSystemEvents_SessionEnding);

}

32 检查并启动Windows服务

/// <summary>

/// 启动已暂停或停止的服务

/// </summary>

private void StartService()

{

try

{

foreach (string serviceName in rwCnfgGsServiceNames)

{

ServiceController myService = new ServiceController(serviceName);

ServiceControllerStatus status = myServiceStatus;

switch (status)

{

case ServiceControllerStatusContinuePending:

break;

case ServiceControllerStatusPausePending:

break;

case ServiceControllerStatusStartPending:

break;

case ServiceControllerStatusRunning:

break;

case ServiceControllerStatusPaused:

case ServiceControllerStatusStopped:

{

myServiceStart();

myServiceWaitForStatus(ServiceControllerStatusRunning, new TimeSpan(0, 2, 0));

CommonwLog("完成启动服务: " + myServiceServiceName + "  " + SystemDateTimeNowToString());

}

break;

case ServiceControllerStatusStopPending:

break;

default:

break;

}

}

}

catch (Exception err)

{

CommonwLog(errToString());

}

}

32 检查并启动对应GUI程序

/// <summary>

/// 启动所有要启动的程序

/// </summary>

private void StartProgram()

{

try

{

foreach (string ProgramPath in rwCnfgGsProgramPaths)

{

string fileName = "";

//fileName = SystemIOPathGetFileName(ProgramPath); //文件名

//string ext = SystemIOPathGetExtension(ProgramPath); //扩展名

fileName = SystemIOPathGetFileNameWithoutExtension(ProgramPath);// fileNameReplace(ext, "");

if (!IsExistProcess(fileName))

{

ProcessStartInfo startInfo = new ProcessStartInfo(ProgramPath);

startInfoWindowStyle = ProcessWindowStyleNormal;

ProcessStart(startInfo);

CommonwLog("完成启动程序: " + fileName + ",完整路径:" + ProgramPath + "  " + SystemDateTimeNowToString());

SystemThreadingThreadSleep(3  1000); //间隔3秒;

}

}

}

catch (Exception err)

{

CommonwLog(errToString());

}

}

/// <summary>

/// 检查该进程是否已启动

/// </summary>

/// <param name="processName"></param>

/// <returns></returns>

private bool IsExistProcess(string processName)

{

Process[] MyProcesses = ProcessGetProcesses();

foreach (Process MyProcess in MyProcesses)

{

if (MyProcessProcessNameCompareTo(processName) == 0)

{

return true;

}

}

return false;

}

33 为当前Windows服务设置可与桌面交互选项

为"serviceProcessInstaller1" 的 Committed 事件添加以下 *** 作:

(注意引入 SystemManagement 命名空间)

private void serviceProcessInstaller1_Committed(object sender, InstallEventArgs e)

{

try

{

ConnectionOptions myConOptions = new ConnectionOptions();

myConOptionsImpersonation = ImpersonationLevelImpersonate;

ManagementScope mgmtScope = new SystemManagementManagementScope(@"root\CIMV2", myConOptions);

mgmtScopeConnect();

ManagementObject wmiService = new ManagementObject("Win32_ServiceName='" + serviceInstaller1ServiceName + "'");

ManagementBaseObject InParam = wmiServiceGetMethodParameters("Change");

InParam["DesktopInteract"] = true;

ManagementBaseObject OutParam = wmiServiceInvokeMethod("Change", InParam, null);

}

catch (Exception err)

{

CommonwLog(errToString());

}

}

执行效果: (不再需要手动去设置)

电脑重装系统一直显示安装程序正在启动服务可能有以下几种原因和解决方法:

ISO镜像文件错误,导致系统重装无法正常镜像,这种情况只能更换一个镜像文件重新重装系统。

重装服务进程正在继续,只是页面卡住了,这种情况手动重启一下电脑,电脑再次开机时会自动继续开始重装步骤,此时重装就会顺利进行了,等待电脑下一次重启后就可以正常进入系统了。

用WINDOWS原版的安装镜像引导至安装界面按下shift键+f10,呼出cmd菜单,输入diskpart,然后输入list disk,查看磁盘编号,输入select disk 0(0为磁盘编号),输入clean,清除磁盘分区,然后重新安装系统。

防火墙或者安装的第三方杀毒软件存在问题,会阻止新的后台服务程序,然后安装程序检测不到启动结果,只好重复启动服务,陷入死循环,这种情况需要关闭防火墙或者卸载杀毒软件,然后重新安装系统。

安装程序本身安装过程没有考虑国情,比如nvidia等显示卡驱动安装程序,默认情况下把net给你钩上了,然后你安装的时候需要去ms的站点下载,会陷入假死,这种情况需要取消net的勾选,然后重新安装系统。

希望以上方法能够帮助你解决问题。

开机服务项是不能加入的,你想让这个程序“开机就启动”可以实现,方法如下:

开始--运行,输入:regedit,打开注册表后,依次打开HKEY-LOCAL-MACHINE\SOFTWARE\Microsoft\Windows\CurrenVersion\Run打开后在右边空白处点右键:新建-字符串值,名称随便写,数值就是你那个程序安装的路径(一定要是exe程序启动文件的路径),完成后关闭注册表再重启电脑就能实现开机自动启动了。

启动停止服务程序有很多的方法:

有些程序自身提供了设置的界面,可以通过这种方式来设置启停;还可以使用第三方的一些程序来控制启停,比如某某卫士之类的程序;还可以通过windows系统的服务管理来指定服务程序启停;不过这些方法 *** 作上都嫌麻烦一些,如果需要频繁切换启动停止的话,上面的这些 *** 作方式就显得有些罗嗦了,这时通过命令行启停就是很方便的方式了。使用命令行也是很简单的事,下面进入实际 *** 作。

方法/步骤如下:

1、鼠标右键点击桌面的“计算机”选择“管理”菜单项。

2、点击了“管理”菜单后,会打开计算机管理窗口,在左侧的树形列表中,点击“服务”项节点。窗口右侧就是系统服务项目列表了,有服务名称、服务说明、状态等,可以在这里终止服务及调整服务的启动方式。下面,我们以图中红圈里的“MSSQLSERVER”服务为例 *** 作。

3、在服务列表中选择服务后,点击鼠标右键,在d出的菜单中选择“属性”菜单,打开属性窗口。

4、打开属性窗口的目的,主要是为了得到服务名称,因为列表里看到的名称叫做“显示名称”,用命令行 *** 作的时候必须要指定服务名称才行。图中红圈的地方,这个名称可以用鼠标选择后,按快捷键Ctrl+C复制到系统剪切板中备用。

5、用任意的可以编辑文本的编辑器,系统自带的就是记事本了,打开记事本,粘贴刚才复制的服务名到文本中。

6、补充上命令的其他部分。启动服务用命令:NET STAR,停止命令用命令:NET STOP,补充在服务名称前面。启动和停止分别建立一个文本,以便控制启动和停止。

7、保存文档为bat格式。点击记事本菜单中的文件菜单,选择保存,在d出的保存对话框中注意:设置保存类型为所有文件,以便可以自己命名文件后缀。当然也可以保存后,到资源管理器中自己修改文件扩展名,改为bat。这样,启动和停止的服务命令行文件就都做好了,可以方便的启动和停止服务了。windows7教程

#!/bin/sh -------不解释了

/etc/rcd/initd/functions -------执行etc下rcd下initd文件夹里面的functions程序

exec=/usr/sbin/atd -------赋值

prog="atd" -------赋值

config=/etc/sysconfig/atd

[ -e /etc/sysconfig/$prog ] && /etc/sysconfig/$prog -----如果/etc/sysconfig/下存在atd文件,就执行

lockfile=/var/lock/subsys/$prog ----赋值

以上就是关于如何在Windows服务启动的GUI程序全部的内容,包括:如何在Windows服务启动的GUI程序、电脑重装系统一直显示安装程序正在启动服务,反复重新开机也还是这样。怎么办、怎样把一个应用程序改为服务启动项里面啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10177886.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存