我写个测试程序执行以下代码:
nRet = ::WinExec("C:\\Program Files\\ACD Systems\\ACDSee\\5.0\\ACDSee5.exe", SW_SHOW);
发现ACDSee不能执行起来。而用ShellExecute可以执行起来。
但如果把以上代码在服务中执行,则ACDSee立刻被启动。是由于权限的问题吗?
我不希望通过服务来执行WinExec(那样会导致执行起来的ACDSee具备系统权限),也不想用ShellExecute(由于我的程序是个拦截程序,会使我陷入死循环),我该如何通过函数执行WinExec?
或者通过CreateProcess,如何设置参数,达到执行ACDSee的目的?谢谢

解决方案 »

  1.   

    STARTUPINFO StartupInfo;
       PROCESS_INFORMATION ProcessInfo;
        StartupInfo.cb = sizeof(StartupInfo);
       StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
       StartupInfo.wShowWindow = SW_SHOWNOACTIVATE ;
       GetStartupInfo(&StartupInfo);   BOOL fRet=::CreateProcess(NULL,
             "c:\\winnt\\notepad.exe d:\\11.txt",
             NULL,
             NULL,
             FALSE,
             CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS,
             NULL,
             NULL,
             &StartupInfo,
             &ProcessInfo);
      

  2.   

    不好用啊,执行不起来,ACDSee很奇怪,一般的CreateProcess执行不起来啊,哪位高手有其他的办法?谢谢。
      

  3.   

    nRet = ::WinExec("C:\\Program Files\\ACD Systems\\ACDSee\\5.0\\ACDSee5.exe", SW_SHOW);dev c++测试通过
      

  4.   

    ACDsee 确实执行起来了吗? 请问什么操作系统 我在2000server(sp4) 和xp(sp2)下ACDSee都不能执行起来,不知道为什么,请您帮忙 谢谢
      

  5.   

    当然。我的是2000 pro,但应该没关系,rpwt拉,嘿嘿
      

  6.   

    请问你安装的是ACDsee5吗?请您拿depandecy打开ACDSee5.exe看一下它的动态连接库是否齐全,谢谢。
      

  7.   

    不好意思,原来是ACDSee5,我还是用最老的ACDsee32,后面的版本太大又占资源...帮不了你,抱歉
      

  8.   

    郁闷!我试验了,如果双击运行我写的测试程序,执行以上函数,就可以运行起ACDSsee5,如果通过VC调用起我写的测试程序,就不能执行起ACDSee5,这是为什么?权限吗 ?