因为是WIN7系统,程序运行时有的设置需要触及到UAC。但是网上找的方法都不行,有的方法使用了根本没反应;另外虽然能产生uac盾牌,但在编译时会出现一个错误:[DCC Error] E2161 Warning: Duplicate resource:  Type 24 (user-defined), ID 1; File E:\DELPHI\Project1.res resource kept; file uac.res resource discarded 
我想用过WIN7的坛友都会认为WIN7是大势所趋的,大家帮我想想办法吧 感激不尽。。

解决方案 »

  1.   

    Win7连添加资源都无用了,必须手动执行
      

  2.   


    ....真的假的http://hi.baidu.com/ca/blog/item/73ba4182debac7a70cf4d2c5.html我觉得应该是文章里UAC.manifest的问题,可惜不会xml...继续顶贴。
      

  3.   

    那个东西应该是有用的,不过我倾向于用Shellexecute的runas指定以管理员身份运行
      

  4.   

    另外win7上两种方法似乎都失效了,只能手动以管理员身份执行cmd,然后cmd执行程序
      

  5.   

    ShellExecute(0, // owner window
                   L"runas",
                   L"C:\\Windows\\Notepad.exe",
                   0, // params
                   0, // directory
                   SW_SHOWNORMAL);
      

  6.   


    无法运行,manifest才是解决uac问题的门路
      

  7.   

    win7是刚出来的系统。正版还没有发行,等正版再看吧。
      

  8.   

    windows7我还没试过,可能Shellexecute在win7行不通了,不过Vista下的确是有效的,win7国外有论坛,E文好一点可以到国外论坛去问,我记得MFC版也有人问过,最后也是没答案
      

  9.   

    1. res文件失败的原因很简单,delphi的编译提示也说的很清楚了,有两个type=24、id=1的资源,发生冲突了所以只保留了 delphi 自带的那个,也就是支持xp主题 manifest。想要验证的话,只要注释掉 .dpr 文件中的 {$R *.res} 一句就可以了
    2. ShellExecute runas 在 win7 下正常
    3. win7 早在7月22号就已经rtm了,而且根据 hash 就是7月13号就已经发布的7600.16385,msdn版也早就发布了。零售版没上架不代表“还没有发行”
      

  10.   

    控制面板-管理工具-系统配置-工具或者运行  C:\Windows\System32\UserAccountControlSettings.exe把UAC给毙就行了啊
      

  11.   


    7月末就已经RTM了,10月月末正式发布只是走个形式而以,大多OEM厂商在8月初就拿到母盘了
      

  12.   


    第一点确实如楼上所说,但是这样程序图标也消失了,application里的icon选项为灰色。
      

  13.   


    程序是自己用的话还可以这样,但是不能要求每位用户都这样啊,那样vista跟win7重要安全特性就完全被抛弃了。。
      

  14.   

    这个方法试过了吗????Vista提供的UAC机制,是Vista的新增功能之一。它的主要目的是防止对于操作系统本身的恶意修改。如果想对于Vista的系统设置进行改动,必须通过UAC的验证才能够进行。通过这样的手段,大大提供了系统的安全性。 关于UAC的利弊,网络上的说法褒贬不一,在这里就不具体讨论了。 对于Delphi程序的影响,UAC主要在于以下几点: 1、由于UAC机制,Delphi对于系统的操作可能无声的失败,而同样的程序,在2000/X下面可能运行正常。譬如注册表的改动 2、为了避免这样的情况,Delphi程序必须支持Vista UAC标注,也就是说,在UAC程序的图标下面显示盾牌标志。这样可以在需要系统更高权限的时候,提醒用户。 为了让程序显示UAC标志,现在看来Vista是通过读取程序的资源(Resource)里面的MANIFEST资源,来决定是否显示“UAC盾牌”。 为了支持Vista,Delphi程序必须在资源里面嵌入MANIFEST信息。 1、首先编辑一个文件,内容如下: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">  
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
        <security> 
          <requestedPrivileges> 
            <requestedExecutionLevel level="requireAdministrator"/> 
          </requestedPrivileges> 
        </security> 
    </trustInfo> 
    </assembly> 
    保持为UAC.manifest,这里文件是随意的。特别注意红色的“requireAdministrator”,这个表示程序需要管理员(Administrator)才能正常运行。 2、然后编辑一个RC文件,名为uac.rc 1 24 UAC.manifest 其中: 1-代表资源编号 24-资源类型为RTMAINIFEST UAC.manifest-前面的文件名称 3、用brcc32编译这个rc文件为res文件 brcc32 uac.rc -fouac.res 4、在程序里面加入 {$R uac.res} 让Delphi编译的时候,把uac.res编译进exe文件 5、把文件放到vista里面运行,就会看程序图标下面显示UAC盾牌标志了。 
      

  15.   


    说的就是这个方法,按你说的把{$R *.res} 删除,再加上{$R uac.res} 是可以编译,但是程序图标会丢失。请问你试过了吗
      

  16.   

    按你说的把{$R *.res} 删除,再加上{$R uac.res} 是可以编译为什么要把{$R *.res}给删了呢,两者不能并存吗???对不起,我不能做测试,因为我的电脑太低端了,无法支持WIN7
      

  17.   

    哪本教材说两个或两个以上的RES无法并存啊?还是程序决定了只能有一个RES存在呢?不要跟我这个菜鸟计较什么,那是浪费你宝贵的时间。
      

  18.   

    一点儿想象力都没有,你就不会试试用你的uac.res替换一下原来的res么
      

  19.   


    不能并存,不然就会出现上面的提示“[DCC Error] E2161 Warning: Duplicate resource:  Type 24 (user-defined), ID 1; File E:\DELPHI\Project1.res resource kept; file uac.res resource discarded ”
      

  20.   


    把uac.res的名称变成程序那个名称的RES程序里继续用{$R *.res}是不是这样的意思啊?
      

  21.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    {$R uac.res} procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.Text:='我靠';
    end;end.你是编写DLL啊,我的怎么没有{$R *.res} 
      

  22.   

    在Source\VCL目录下应该有这样两个文件sample.manifest和WindowsXP.rc,可以通过如下方法处理:1.可以通过修改sample.manifest把其中的
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
    <requestedExecutionLevel
      level="asInvoker"
      uiAccess="false"/>
      </requestedPrivileges>
    </security>
      </trustInfo>
    改为
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
    <requestedExecutionLevel
      level="requireAdministrator"
      uiAccess="false"/>
      </requestedPrivileges>
    </security>
      </trustInfo>
    另存为requireAdmin.manifest2.打开WindowsXP.rc,将内容编辑成
    并另存为requireAdmin.rc3.通过命令行编译成requireAdmin.res4.把编译出来的文件requireAdmin.res放到$(BDS)\lib目录下5.在需要的程序当中,打开Project菜单下的Options...菜单项,将Application下面的"Enable runtime themes"的勾选去掉.6.打开Project菜单下的View Source菜单项,然后在
    {$R *.res}
    下面添加一行
    {$R requireAdmin.res}7.重新编译即可.
      

  23.   

    估计是因为manifest资源异常,可以用UE等工作,或者资源查看工具,查看一下,是不是有两份.
      

  24.   

    我测试过,如果再加上一个有效的数字签名的话,不管是Vista还是Win7都不会提示UAC安全对话框.
      

  25.   


    那不是绕过UAC机制了吗?话题怎么变成入侵系统了。我太困了,明天再聊吧 咕噜咕噜。。
      

  26.   

    我那两个测试文件都没有UAC盾吗?念经吃饭去了
      

  27.   

      这个问题很简单,没有大家想象的那样麻烦!其实只要在程序的版本信息中加上一些特殊的词让Windows7将你的程序识别为安装程序即可。具体操作方法如下:
      在Delphi主菜单中选Project -> Options... -> Version Info 窗口中的 ProductName 中填上含有“Setup”, ”Install” , “Update” 等任一字符串编译后Exe文件图标上就会出现盾牌了! 这个方法由UAC的本地安全策略“检测安装程序”所控制。如果该策略设置为无效,则无效。默认是有效的。 当然,这种安装包也可以强行设置为非管理员权限运行。 
      

  28.   

     <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel
              level="asInvoker"
              uiAccess="false"/>
          </requestedPrivileges>
        </security>
      </trustInfo>Delphi7下的文件里找描述字符不是这样的,而是:<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity
       type="win32"
        name="DelphiApplication"
        version="1.0.0.0" 
       processorArchitecture="*"/>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            publicKeyToken="6595b64144ccf1df"
            language="*"
            processorArchitecture="*"/>
        </dependentAssembly>
      </dependency>
    </assembly>
      

  29.   

    delphi7版的UAC.res,融合XP风格和UAC盾牌
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity
       type="win32"
        name="DelphiApplication"
        version="1.0.0.0" 
       processorArchitecture="*"/>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            publicKeyToken="6595b64144ccf1df"
            language="*"
            processorArchitecture="*"/>
        </dependentAssembly>
      </dependency>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
      <security> 
        <requestedPrivileges> 
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
        </requestedPrivileges> 
      </security> 
    </trustInfo>   
    </assembly>
      

  30.   

    其实只要把两段XML拼合在一起brcc就可以了
      

  31.   

    搞定,与项目文件相同的res文件。该文件,用VC打开,在24->1,打开后,找到<requestedPrivileges> <requestedExecutionLevellevel="asInvoker"
              uiAccess="false"/> </requestedPrivileges> ,把asInvoke改成requireAdministrator,保存就可以了。
      

  32.   

    http://blog.csdn.net/stosc/article/details/7015121
    参考这篇文章能找到解决办法
      

  33.   

    上述的方法在delphi xe2, win7下都不好用啊!!
      

  34.   

    不灵啊!!! delphi xe2, win7 下上述方法怎么都不灵啊!!!
      

  35.   

    delphi7本身就可以兼容两个res到程序里,没有用uac就无法指定图标的问题。谁说不行?