1

我有一个 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 和管理员以及只有读取和执行权限的用户。创建的文件有一个额外的对象,我的帐户,具有完全权限。这听起来合乎逻辑,因此我将具有完全权限的帐户添加到已安装的文件之一中,希望应用程序能够将其删除。然后,正如预期的那样,我可以在资源管理器中手动删除文件,无需权限。但该应用程序仍然无法删除它!于是我把已安装文件的用户权限改成了完全权限,App还是删不掉!然后我在高级中更改为文件的所有者,首先更改为用户,然后更改为我的帐户。该应用程序仍然无法删除它。

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

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

4

2 回答 2

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”替换为您的项目名称。

于 2013-10-08T12:08:40.480 回答
0

Kenny Kerr撰写的这篇出色的文章 给出了答案,即在清单中使用 level="highestAvailable"。

于 2013-10-10T15:59:43.053 回答