zoukankan      html  css  js  c++  java
  • 解决在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)
       问题解决,下班回家。





  • 相关阅读:
    JOIN条件限制对结果记录的影响
    什么是linux?
    什么是操作系统?
    Internship settled!
    Python dict 调试技巧 —— 利用YAML存储dict内容
    c++ 异常处理
    C#可空类型
    C# 异常处理
    C#值类型与引用类型
    C# 类类型
  • 原文地址:https://www.cnblogs.com/febwave/p/1188770.html
Copyright © 2011-2022 走看看