我遇到了这个经常说明的问题,但即使在查找了几乎所有的scource之后我都没有得到一个aswer。问题如下:
我写了一个小的更新程序工具,它连接到服务器以检查应用程序的新版本,然后将新版本复制到clientmashine。所以模式如下:
客户端安装我使用特定应用程序预先配置的更新程序。基本上,updater位于Program Files文件夹中的某个位置。然后启动更新程序,连接到我们的服务器并获取最新版本并将其安装到与更新程序安装完全相同的目录。所以客户端不知道有两个应用程序。更新程序和更新程序的主要应用程序。我希望你明白这个主意。
所以这就是我需要访问Program Files文件夹的原因。
我在Windows 7下开发,软件也在7上运行。
有没有办法确保更新程序由管理员运行。我是否需要管理员权限才能访问它?除非我确实拥有管理权限,否则它还会拒绝访问?有没有办法检查代码用户拥有哪些权限?
答案 0 :(得分:4)
我会将检查程序和更新程序分成两个不同的应用程序。检查器可以作为普通用户运行。当它检测到有更新时,它会启动更新程序。对于更新程序,您有a manifest that states that it needs admin rights。这将导致提示用户授予访问权限(假设已启用UAC)。
答案 1 :(得分:2)
由于Vista,7和2008服务器上的安全模型,您应该创建一个清单来告诉使用您的应用程序需要什么级别的访问权限,并让它自动提示管理权限(如果它们在没有UAC的情况下运行)。
答案 2 :(得分:0)
在您的应用中使用app.manifest。将requireadministrator设置为true。或复制粘贴下面的xml
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="true" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
以上是vb.net应用程序。