有个问题需要请教下大家:一个windows应用程序,必须有管理员权限才能正常运行,但有些用户不能接受,说管理员权限风险太大,他们想在普通用户下也能正常使用,不知各位有没有什么好的方法。
    如果把这个程序在管理员权限下注册为系统服务,然后在普通用户下操作不是可不可行?如果可行如何解决程序与用户交互的问题。
    欢迎大家发表意见。
    

解决方案 »

  1.   

    http://topic.csdn.net/u/20081009/16/0023f9a2-3267-45a3-aa4a-7552914bb2f2.html
    参看5,6楼hoboo的答复看如何模拟用户登录。
      

  2.   

    先谢谢hoboo,我先试下。
    欢迎大家继续发表意见!
      

  3.   

    首先要感谢两位的回答。
    再请教下两位:
        hoboo: 能不能再具体分析下,讲一下这种方式比较适合什么情况,也方便大家学习,如果有简单的演示程序也可以。    cnzdgs: 这种思路确实不错,还有个问题,应用程序与服务之间进行通信的话,是不是和进程间通信原理类似?还请指教。欢迎大家继续讨论,发表下自己的思路想法。共同学习 
      

  4.   

    系统service是不能有User Interactive 的,所以需要分成两个来
    应用程序和服务之间可以用共享内存,socket,IPC等
      

  5.   

    再顶一次
    hoboo说的模拟用户登陆,我一个小程序试了一下,貌似是可以的。
    但如果用户不知道管理员的用户名或密码的话,能不能得到管理员的权限那?我把hoboo的思路给贴了过来:
    1:首先 要LogonUser。通过这些步骤可以实现用户模拟登录
    2:DuplicateTokenEx(....); 
    3:成功则ImpersonateLoggedOnUser( ...); 
      通过1,2可以模拟其他用户的登录并获得其权限 
    4:OpenThreadToken( GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, TRUE, &hThreadToken ) 
    5:通过LookupPrivilegeValue(...),AdjustTokenPrivileges调整相关权限 
    6:干你想干的事情 
    7:通过AdjustTokenPrivileges把权限调回去 
    8:通过RevertToSelf()恢复原登录