zoukankan      html  css  js  c++  java
  • WIN7中因为服务进程是运行在session0下面的~~第一个登录的用户session为1(WTSGetActiveConsoleSessionId取得session的Id,OpenProcessToken取得进程的令牌)

    procedure TsvrExamCtrl.ServiceStart(Sender: TService; var Started: Boolean);
    var
      CMD: string;
    begin
      WinExec(PAnsiChar('C:Windows otepad.exe'), SW_SHOWNORMAL);
    end;
    以上是我服务程序 在服务启动的时候 的代码 服……



    其实你的记事本已经打开了,只是你看不见而已,你看下进程里面是不是已经有notepad的进程了,WIN7中因为服务进程是运行在session0下面的~~第一个登录的用户session为1

    winexec 和 shellexecute 都不行。都只是在进程里面创建 界面上跳不出来

    --------------------------------------------------------------------------------

    感谢各位的热心帮助
    问题已经解决

    一个比较简单的方法:

    1.WTSGetActiveConsoleSessionId
    2.WTSQueryUserToken
    3.CreateProcessAsUser
      
    三步就能实现目标
    但是如果第三步使用CreateProcessWithToken创建进程只能改变用户名不能改变session id

    那个楼主已经做成功了试试吧,其实关键之处就是得到当前登录用户的Token令牌,然后CreateProcessAsUser用此令牌,创建一个属于此会话下面的进程

    --------------------------------------------------------------------------------

    谢谢楼上  代码研究出来了。 但是程序总是会在服务桌面里面开起来 不会在当前用户桌面上启动 白搭了。。
    有没办法让他弄到当前桌面上来? 请指教

    procedure TForm1.Button5Click(Sender: TObject);
    var
      hToken:thandle;
      ph:thandle;
      si:STARTUPINFO;
      pi:PROCESS_INFORMATION;
    begin
      ph:=openprocess(PROCESS_ALL_ACCESS ,
                       false,
                       GetCurrentProcessID());
      if ph<=0 then exit;
      openprocesstoken( ph,TOKEN_ALL_ACCESS,hToken); //去当前进程Token等同于取当前帐户Token
      try
        ZeroMemory( @si, sizeof( STARTUPINFO ) );
        si.cb := sizeof( STARTUPINFO );
        Si.lpDesktop := PChar('Winsta0Default');
        si.wShowWindow:=SW_SHOWNORMAL;
        CreateProcessAsUser(hToken,pchar(cmd) , pchar(para),  nil,nil,FALSE,
                        Create_DEFAULT_ERROR_MODE,//NORMAL_PRIORITY_CLASS or Create_NEW_CONSOLE,
                         nil,nil,si,pi );

      finally
        closehandle(ph);
      end;
    end;

    http://bbs.csdn.net/topics/390249745

  • 相关阅读:
    Python字符串的encode与decode
    python数据操作方法封装
    python的继承
    python常用模块
    python导入模块和包的使用
    python实现curl功能
    [转]Java反射机制详解
    kafka入门
    [转]Servlet的学习之Filter过滤器技术
    [转]Java泛型
  • 原文地址:https://www.cnblogs.com/findumars/p/6000729.html
Copyright © 2011-2022 走看看