如何使Window应用程序运行后,不受用户注销的影响继续运行

xxj 2007-03-16 04:31:40
在我们目前的项目中有这样的一个不是很常见的需求:
Window应用程序运行后,不受用户注销的影响继续运行
一般的Window程序不论是运行在Windows 2000,还是运行在2003下,只要用户一注销的话,系统就会关闭Window程序。
请注意我这里讨论的不是控制台程序。请大家帮忙或者动用朋友资源帮我解决一下这个问题。
目前的程序结构:
一个Windows Service 进程监视那些需要启动的Windows Application(有一个配置程序), 发现下面的奇怪现象:
1.Windows Service 启动的Notepad 和Winzip程序,操作系统用户注销后,继续运行

2.Windows Service 启动的其他程序(用C++ Builder开发的几个程序) ,操作系统用户注销后,却不能继续运行.

各位大侠何故?

...全文
1392 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kxalpah 2009-10-18
  • 打赏
  • 举报
回复
我现在也有同样的问题,试一下吧
xxj 2007-03-19
  • 打赏
  • 举报
回复
问题已经解决:
CreateProcessWithLogonW
但是必须要CreateProcess的时候必须要提供用户名及密码等登陆信息
jixingzhong 2007-03-17
  • 打赏
  • 举报
回复
弄成系统服务,
这样是否可行 ?
pass86 2007-03-17
  • 打赏
  • 举报
回复
要求很特殊啊,杀毒好像就是一直开着
roger_77 2007-03-16
  • 打赏
  • 举报
回复
把你的程序注册为NT Service程序,随系统启动而自动运行。

http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1319
WingForce 2007-03-16
  • 打赏
  • 举报
回复
我觉得
CreateProcessAsUser

The CreateProcessAsUser function creates a new process and its primary thread. The new process then runs the specified executable file. The CreateProcessAsUser function is similar to the CreateProcess function, except that the new process runs in the security context of the user represented by the hToken parameter. By default, the new process is noninteractive, that is, it runs on a desktop that is not visible and cannot receive user input. Also, by default, the new process inherits the environment of the calling process, rather than the environment associated with the specified user.

The CreateProcessWithLogonW and CreateProcessWithTokenW functions are similar to CreateProcessAsUser, except that the caller does not need to call the LogonUser function to authenticate the user and get a token.

This function is also similar to the SHCreateProcessAsUserW function.


BOOL CreateProcessAsUser(
HANDLE hToken,
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);

应该可以简单的实现该需求
HewpKanXue 2007-03-16
  • 打赏
  • 举报
回复
mark
jixingzhong 2007-03-16
  • 打赏
  • 举报
回复
用户注销后,程序继续运行

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

首先用.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这个服务结束就行了,因为它只是起了一个过渡的作用,为服务器省要一点资源。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1500133
jixingzhong 2007-03-16
  • 打赏
  • 举报
回复
关注
iamcaicainiao 2007-03-16
  • 打赏
  • 举报
回复
MARK 2
healer_kx 2007-03-16
  • 打赏
  • 举报
回复
MARK

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧