我有一个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问题,我应该将应用程序留在旧的安装文件夹中,它可以用自己的文件做它喜欢的事情!!
答案 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”。