使用清单中的管理员权限运行VB6应用程序

时间:2013-10-08 05:22:01

标签: vb6 permissions manifest

我有一个VB6应用程序来操作ProgramData文件夹Win7中的文件。它可以很好地处理它创建的文件,但是最初安装的任何文件都无法删除。我觉得除非程序可以作为管理员运行,否则可能会有更多问题。

我已尝试将TrustInfo部分放入其清单中,但会显示一条消息....'请求的操作需要提升。'

清单包括......

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
       </security>
  </trustInfo>

请知道如何给它所需的“高度”? 经过更多的研究,似乎正确的是,ProgramData是Win7中使用的文件夹,但所有安装的文件都需要管理员权限才能删除(无论setup.exe是否以管理员身份运行)。

出于兴趣,我将安装的文件的安全属性与应用程序随后创建的文件进行了比较。已安装的文件具有SYSTEM和Administrators具有完全权限,而Users只有Read和Execute。 创建的文件有一个额外的对象,我的帐户,具有完全权限。这听起来合乎逻辑,所以我将我的帐户(具有完全权限)添加到其中一个已安装的文件中,期望应用程序能够删除它。然后,正如预期的那样,我可以在资源管理器中手动删除该文件,无需权限。但该应用程序仍然无法删除它! 那么我将已安装文件的Users权限更改为完全权限,App仍无法删除它! 然后我在Advanced中更改为文件的Owner,首先更改为Users,然后更改为我的帐户。仍然应用程序无法删除它。 现在,已安装文件的安全设置与应用创建的文件之间似乎没有任何区别,两者都具有相同的权限和相同的所有者。

因此,如果我比较高级安全性设置,则两个文件之间仍然存在一些差异。已安装的文件在我的帐户和用户的权限中有2个额外的“未继承”条目。即使我删除了高级中的用户条目(仍然只是读访问权限),该应用仍然无法删除。

我想知道这是否是一个VB6问题,我应该将应用程序留在旧的安装文件夹中,它可以用自己的文件做它喜欢的事情!!

2 个答案:

答案 0 :(得分:1)

在对你的问题进行一些研究之后,我发现很多人都在使用类似的清单。尝试将级别设置为“asInvoker”。 :

<?xml version="1.0" encoding="utf-8" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" 
      processorArchitecture="X86"
      name="MyProjectName"
      type="win32" />
  <description>MyProjectDescription</description>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

将“MyProjectName”替换为您的项目名称。

答案 1 :(得分:0)

这篇优秀文章...... by Kenny Kerr 答案是在清单中使用level =“highestAvailable”。