做一胩服务程序(service),以系统账号(system account)启动,然后,再由该服务程序来加载这个程序即可.如果程序可以修改的话,就直接改为service.

解决方案 »

  1.   

    使用CreateService就能创建一个服务程序,把你的EXE路径设置成服务程序路径即可。服务程序只能通过StartService来启动,实际上是通过服务管理器来启动的,服务程序跟普通进程的区别是:
    在main入口点里必须注册一个ServiceMain函数,这是服务程序的入口点;
    提供一个回调函数,用RegisterServiceCtrlHandler来登记这个回调,用以接收各种服务控制指令;
    服务程序要做成CONSOLE子系统,通常它没有窗口,也没有运行在桌面帐户上。
      

  2.   

    要做服务程序才行。在MSDN中查一下2楼提到的函数,MSDN中有例子可以参考。
      

  3.   


    服务程序有其自己的框架,一般的程序就算注册成服务,也是无法响应系统的服务启动,停止等操作的.具体自己去查看createservice()相关的API.也可以利用第三方程序以服务模式加载你的程序,象srvany.exe等.
      

  4.   

    msdn上完整的服务程序的例子。
    http://msdn.microsoft.com/en-us/library/bb540476(VS.85).aspx总的来说就是要实现windows管理服务程序的几个接口函数。
      

  5.   

    看下这个例子吧,有流程A Windows Service Applicationhttp://www.codeproject.com/KB/system/Sund_WindowService.aspx
      

  6.   

    这是得到进程的用户名
    这是靠查询进程令牌信息得到的。程序如下。#include <windows.h>
    #include <stdio.h>/* */
    void GetProcessAuth(long pid)
    {
    //获得运行进程的用户身份,此处对于8以上的进程没问题,对于8,0进程无法列出(8是Win2000下的,WinXP下为4)
    SID_NAME_USE peUse;
    HANDLE hp;
    HANDLE hToken;
    int isok;
    char buf[0x400];
    char buf1[100];
    char buf2[100];
    DWORD dwNumBytesRet;
    DWORD dwNumBytesRet1;hp=OpenProcess(0x400, 0, pid);//0x400 is PROCESS_QUERY_INFORMATION
    isok=OpenProcessToken(hp, 0x20008, &hToken);//这个0x20008不知道什么,TOKEN_QUERY?
    if(isok)
    {
    isok=GetTokenInformation(hToken, TokenUser, &buf, 0x400, &dwNumBytesRet);
    if(isok)
    {
    dwNumBytesRet=100;
    dwNumBytesRet1=100;
    isok=LookupAccountSid(NULL, (DWORD *) (*(DWORD *)buf), buf1, &dwNumBytesRet, buf2, &dwNumBytesRet1, &peUse);
    if(isok)
    {
    printf("Run Auth:%s\\%s \n", buf2, buf1);
    }CloseHandle(hToken);
    }
    }CloseHandle(hp);
    }/* */
    int main(int argc, char **argv)
    {
    long pid;
    if(argc != 2)
    {
    printf(" - %s ProcessId\n", argv[0]);
    return 0;
    }pid=strtol(argv[1], 0, 0);
    GetProcessAuth(pid);
    return 0;
    }
      

  7.   

    创建一个服务
    用CreateProcess()启动你要设为system的程序