在用汇编编写Windows服务时遇到了一些问题,我是第一次编写Windows服务程序,觉得问题很麻烦。。。
作为服务,它不能显示东西出来,MessageBox出不来,就连创建的子进程都无法显示窗口。
在dwServiceType中添加了SERVICE_INTERACTIVE_PROCESS属性,并且在服务管理中允许其与桌面交互后……
结果它总是出现[Windows交互式服务检测]的对话框,选择查看后才能看到我想显示出来的东西,而且是在另一个环境下显示的。我的Win7下是这样的。
ToT……
就算不让它直接与桌面交互,总得有个办法然它的子进程的界面显示出来丫……
求解答!
------最佳解决方案--------------------------------------------------------
xp下运行是正常的吗?
------其他解决方案--------------------------------------------------------
try to:
开始输入services.msc 然后找到Interactive Services Detection 右键属性里把它禁用了之后确定-重启!
------其他解决方案--------------------------------------------------------
结果它干脆什么都不出来了……
就像Interactive Services Detection注释里说的那样,“如果停止此服务,则对新交互服务对话框的通知将无法正常运行,而且可能无法访问这些交互服务对话框。如果已禁用此服务,则不再有新的交互服务对话框通知,也无法访问这些对话框。”
------其他解决方案--------------------------------------------------------
回头我去试试,根据网上的一些说法,应该是正常的,现在Win7也慢慢普及了,也不得不考虑呢、、、
------其他解决方案--------------------------------------------------------
XP下完全正常……!
我在想啊,那个[Windows交互式服务检测]的对话框就是由Interactive Services Detection服务弹出的
它就能直接显示出来……别的服务要显示出来,就得通过它才行……蹊跷...
------其他解决方案--------------------------------------------------------
又有新发现了,[Windows交互式服务检测]的对话框由Interactive Services Detection弹出的,Interactive Services Detection服务会调用CreateProcessAsUserW创建一个子进程,再由子进程弹出对话框。我的子进程就显示不出对话框,问题应该出现在CreateProcessAsUserW这里,系统服务隶属于SYSTEM用户,而Interactive Services Detection调用CreateProcessAsUserW创建的进程隶属于当前用户。同样,我调用CreateProcessAsUserW创建隶属于当前用户的子进程,那么子进程也应该能与桌面正常交互了
------其他解决方案--------------------------------------------------------
测试通过了吗?