• 解决在vista下控制面板项创建进程的问题


         又是vista。又是vc6。
         控制面板项就是一个cpl,说到底不过也就是一个dll。没有料到在vista下dll也需要manifest。这是第一个问题。
         在这个dll中执行程序竟然返回740。这是第二个问题。
        第一个问题的解决:
        在dll的资源中增加自定义类型 24
        IDR_MANIFEST            24      DISCARDABLE     "res\\vista.xml"
        然后增加一个vista.xml文件。内容如下:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
                     manifestVersion="1.0">
     <assemblyIdentity
         version="1.0.0.0"
         processorArchitecture="*"
         name="AFAXCtl"
         type="win32"/>
     <description>Consumer Control Panel</description>
     <dependency>
      <dependentAssembly>
              <assemblyIdentity
                  type="win32"
                  name="Microsoft.Windows.Common-Controls"
                  version="6.0.0.0"
                  processorArchitecture="*"
              publicKeyToken="6595b64144ccf1df"
                  language="*"/>
      </dependentAssembly>
     </dependency>
     <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
       <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
       </requestedPrivileges>
      </security>
     </trustInfo>
    </assembly>
    大家容易忽略绿色部分,红色部分需要说明一下:操作权限根据当前调用者而定,千万不能设置requestAdministrator。而“IDR_MANIFEST” 需要设置成123,没有写错,就是 123。以前看到别人说dll应该是2。我参考了第三方的控制面板后,发现都是123。
        第二个问题的解决:
        很奇怪winexec,createprocess都返回740失败。上网看看以后发现上述两个方法不会与UAC交互,因此得不到确认,当然就失败了。幸好shellExecute可以使用,据说方法内部与UAC交互了。使用如下:
        ShellExecute(NULL,TEXT("open"),程序路径,程序参数,NULL,SW_SHOWNORMAL)
       问题解决,下班回家。





  • 相关阅读:
    AT2172 Shik and Travel
    bzoj5138 [Usaco2017 Dec]Push a Box
    bzoj3545 [ONTAK2010]Peaks、bzoj3551 [ONTAK2010]Peaks加强版
    bzoj5183 [Baltic2016]Park
    bzoj4423 [AMPPZ2013]Bytehattan
    bzoj2125 最短路
    斐波那契数列小结
    记一场模拟赛
    洛谷2387 BZOJ3669魔法森林题解
    COGS-2638 区间与,异或,询问max
  • 原文地址:https://www.cnblogs.com/febwave/p/1188770.html
Copyright © 2020-2023  润新知