关于从一个系统service启动带窗口的程序的问题

lezard 2013-11-20 04:46:21
我现在有两个程序,一个是带窗口的普通程序,一个是开机自动启动的系统服务,我用这个系统服务已管理员权限打开这个带窗口的程序。试过几种方法:
方法1见下面这个链接
http://blog.csdn.net/woshinia/article/details/7850295

这个方法虽然可以启动带窗口的程序,但是权限是系统权限,有些内部的窗口弹不出来,无法正常使用。

方法2见下面这个链接
http://hi.baidu.com/depteicn/item/d024b81d569f2b15e3f98681?qq-pf-to=pcqq.c2c

这个方法也只能获得桌面的使用者,如果当前的使用者不是管理员,而是一个普通用户,则启动起来的带窗口的程序也不是管理员权限。

设置下面这些属性也试过了,无法将新创建的令牌提升到管理员权限。
  #define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
  #define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
  #define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
  #define SE_DEBUG_NAME TEXT("SeDebugPrivilege")

使用CreateWellKnownSid获取WinBuiltinAdministratorsSid和WinAccountAdministratorSid设置到令牌中也没有效果。

求高人搭救啊,卡了很多天了啊!!!
...全文
248 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyw 2013-11-21
  • 打赏
  • 举报
回复
引用 11 楼 lezard 的回复:
[quote=引用 10 楼 dyw 的回复:] 感觉你这个思路有点问题。应该是获得当前登录用户的令牌吧。管理员没有登录的话,以管理员打开窗口又有什么用?
因为要写注册表,要访问C盘,等等,这些都需要管理员权限,但是我不能出现UAC的对话框[/quote] 这就更不理解了。访问文件系统、注册表是系统服务的基本需求,不会有限制啊,为何还要借助于对话框?
lezard 2013-11-21
  • 打赏
  • 举报
回复
引用 10 楼 dyw 的回复:
感觉你这个思路有点问题。应该是获得当前登录用户的令牌吧。管理员没有登录的话,以管理员打开窗口又有什么用?
因为要写注册表,要访问C盘,等等,这些都需要管理员权限,但是我不能出现UAC的对话框
lezard 2013-11-21
  • 打赏
  • 举报
回复
求高人解答啊
lezard 2013-11-21
  • 打赏
  • 举报
回复
引用 12 楼 dyw 的回复:
[quote=引用 11 楼 lezard 的回复:] [quote=引用 10 楼 dyw 的回复:] 感觉你这个思路有点问题。应该是获得当前登录用户的令牌吧。管理员没有登录的话,以管理员打开窗口又有什么用?
因为要写注册表,要访问C盘,等等,这些都需要管理员权限,但是我不能出现UAC的对话框[/quote] 这就更不理解了。访问文件系统、注册表是系统服务的基本需求,不会有限制啊,为何还要借助于对话框?[/quote] 但是我不是想用这个服务去访问这些内容,而是由窗口程序去访问。
dyw 2013-11-20
  • 打赏
  • 举报
回复
感觉你这个思路有点问题。应该是获得当前登录用户的令牌吧。管理员没有登录的话,以管理员打开窗口又有什么用?
lezard 2013-11-20
  • 打赏
  • 举报
回复
引用 8 楼 max_min_ 的回复:
[quote=引用 7 楼 lezard 的回复:] [quote=引用 6 楼 max_min_ 的回复:] [quote=引用 5 楼 lezard 的回复:] [quote=引用 4 楼 max_min_ 的回复:] [quote=引用 3 楼 lezard 的回复:] 谢谢楼上的两位,但是你们给的文章需要当前的登陆用户是管理员,或者知道管理员的账号,或者在运行的进程中有一个进程是管理员权限的,但是目前这些,如果使用一个普通用户登陆的话,都获取不到。
获取那些信息是需要管理员权限呗! 如果是普通用户的话,通过管理员身份去获取这些信息试试![/quote] 也感谢您的回答,您提到的这个就是问题的关键,现在有的是一个非管理员的账号,和一个系统权限的服务,我不知道该如何让这个服务去拿到管理员的身份,然后在这个服务中用这个管理员的身份去启动另一个带窗口的程序。所以才提出了这个问题。[/quote] 当一个非管理员身份登录的时候,当需要获取特定信息的时候,就把管理员的帐号赋值普通用户,保留一份普通用户帐号!通过管理员的身份成功获取到数据后,再把普通用户的帐号赋值回给当前假冒管理员身份! 当然只是建议,可以试试![/quote] 有没有具体的代码呢,不是很明白该怎么做。[/quote] 这个没有!我只是说了代码的思路![/quote] 哎~~~~不知道有没有方法能直接创建一个管理员权限的令牌
max_min_ 2013-11-20
  • 打赏
  • 举报
回复
引用 7 楼 lezard 的回复:
[quote=引用 6 楼 max_min_ 的回复:] [quote=引用 5 楼 lezard 的回复:] [quote=引用 4 楼 max_min_ 的回复:] [quote=引用 3 楼 lezard 的回复:] 谢谢楼上的两位,但是你们给的文章需要当前的登陆用户是管理员,或者知道管理员的账号,或者在运行的进程中有一个进程是管理员权限的,但是目前这些,如果使用一个普通用户登陆的话,都获取不到。
获取那些信息是需要管理员权限呗! 如果是普通用户的话,通过管理员身份去获取这些信息试试![/quote] 也感谢您的回答,您提到的这个就是问题的关键,现在有的是一个非管理员的账号,和一个系统权限的服务,我不知道该如何让这个服务去拿到管理员的身份,然后在这个服务中用这个管理员的身份去启动另一个带窗口的程序。所以才提出了这个问题。[/quote] 当一个非管理员身份登录的时候,当需要获取特定信息的时候,就把管理员的帐号赋值普通用户,保留一份普通用户帐号!通过管理员的身份成功获取到数据后,再把普通用户的帐号赋值回给当前假冒管理员身份! 当然只是建议,可以试试![/quote] 有没有具体的代码呢,不是很明白该怎么做。[/quote] 这个没有!我只是说了代码的思路!
lezard 2013-11-20
  • 打赏
  • 举报
回复
引用 6 楼 max_min_ 的回复:
[quote=引用 5 楼 lezard 的回复:] [quote=引用 4 楼 max_min_ 的回复:] [quote=引用 3 楼 lezard 的回复:] 谢谢楼上的两位,但是你们给的文章需要当前的登陆用户是管理员,或者知道管理员的账号,或者在运行的进程中有一个进程是管理员权限的,但是目前这些,如果使用一个普通用户登陆的话,都获取不到。
获取那些信息是需要管理员权限呗! 如果是普通用户的话,通过管理员身份去获取这些信息试试![/quote] 也感谢您的回答,您提到的这个就是问题的关键,现在有的是一个非管理员的账号,和一个系统权限的服务,我不知道该如何让这个服务去拿到管理员的身份,然后在这个服务中用这个管理员的身份去启动另一个带窗口的程序。所以才提出了这个问题。[/quote] 当一个非管理员身份登录的时候,当需要获取特定信息的时候,就把管理员的帐号赋值普通用户,保留一份普通用户帐号!通过管理员的身份成功获取到数据后,再把普通用户的帐号赋值回给当前假冒管理员身份! 当然只是建议,可以试试![/quote] 有没有具体的代码呢,不是很明白该怎么做。
max_min_ 2013-11-20
  • 打赏
  • 举报
回复
引用 5 楼 lezard 的回复:
[quote=引用 4 楼 max_min_ 的回复:] [quote=引用 3 楼 lezard 的回复:] 谢谢楼上的两位,但是你们给的文章需要当前的登陆用户是管理员,或者知道管理员的账号,或者在运行的进程中有一个进程是管理员权限的,但是目前这些,如果使用一个普通用户登陆的话,都获取不到。
获取那些信息是需要管理员权限呗! 如果是普通用户的话,通过管理员身份去获取这些信息试试![/quote] 也感谢您的回答,您提到的这个就是问题的关键,现在有的是一个非管理员的账号,和一个系统权限的服务,我不知道该如何让这个服务去拿到管理员的身份,然后在这个服务中用这个管理员的身份去启动另一个带窗口的程序。所以才提出了这个问题。[/quote] 当一个非管理员身份登录的时候,当需要获取特定信息的时候,就把管理员的帐号赋值普通用户,保留一份普通用户帐号!通过管理员的身份成功获取到数据后,再把普通用户的帐号赋值回给当前假冒管理员身份! 当然只是建议,可以试试!
lezard 2013-11-20
  • 打赏
  • 举报
回复
引用 4 楼 max_min_ 的回复:
[quote=引用 3 楼 lezard 的回复:] 谢谢楼上的两位,但是你们给的文章需要当前的登陆用户是管理员,或者知道管理员的账号,或者在运行的进程中有一个进程是管理员权限的,但是目前这些,如果使用一个普通用户登陆的话,都获取不到。
获取那些信息是需要管理员权限呗! 如果是普通用户的话,通过管理员身份去获取这些信息试试![/quote] 也感谢您的回答,您提到的这个就是问题的关键,现在有的是一个非管理员的账号,和一个系统权限的服务,我不知道该如何让这个服务去拿到管理员的身份,然后在这个服务中用这个管理员的身份去启动另一个带窗口的程序。所以才提出了这个问题。
max_min_ 2013-11-20
  • 打赏
  • 举报
回复
引用 3 楼 lezard 的回复:
谢谢楼上的两位,但是你们给的文章需要当前的登陆用户是管理员,或者知道管理员的账号,或者在运行的进程中有一个进程是管理员权限的,但是目前这些,如果使用一个普通用户登陆的话,都获取不到。
获取那些信息是需要管理员权限呗! 如果是普通用户的话,通过管理员身份去获取这些信息试试!
lezard 2013-11-20
  • 打赏
  • 举报
回复
谢谢楼上的两位,但是你们给的文章需要当前的登陆用户是管理员,或者知道管理员的账号,或者在运行的进程中有一个进程是管理员权限的,但是目前这些,如果使用一个普通用户登陆的话,都获取不到。
Exaybachay 2013-11-20
  • 打赏
  • 举报
回复
Launching an interactive process from Windows Service in Windows Vista and later http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and-later.aspx
dyw 2013-11-20
  • 打赏
  • 举报
回复
看看此文有无帮助: Starting an Interactive Client Process in C++ http://msdn.microsoft.com/en-us/library/aa379608.aspx

65,186

社区成员

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

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