2

我遇到了这个经常提到的问题,但即使在查找了几乎所有资源之后,我也没有得到答案。问题如下:

我编写了一个小更新工具,它连接到服务器以检查应用程序的新版本,然后将新版本复制到客户端。所以模式如下:

客户端安装由我使用特定应用程序预先配置的更新程序。所以基本上更新程序位于 Program Files 文件夹中的某个位置。然后更新程序启动,连接到我们的服务器并获取最新版本并将其安装到与安装更新程序相同的目录中。所以客户不知道有两个应用程序。更新程序和更新程序的主要应用程序。我希望你能明白。

所以这就是我需要访问 Program Files 文件夹的原因。

我正在 windows 7 下开发,该软件也可以在 7 上运行。

有没有办法确保更新程序由管理员运行。我需要管理员权限才能访问它吗?即使我确实拥有管理员权限,它也会拒绝访问,还有什么?有没有办法在代码中检查用户拥有什么权限?

4

3 回答 3

4

我会将检查器和更新器分成两个不同的应用程序。检查器可以作为普通用户运行。当它检测到有更新时,它会启动更新程序。对于更新程序,您有一个清单,说明它需要管理员权限。这将导致提示用户授予访问权限(假设已启用 UAC)。

于 2010-08-18T10:47:49.257 回答
2

由于 Vista、7 和 2008 服务器上的安全模型,您应该创建一个清单来告诉用户您的应用程序需要什么级别的访问权限,并让它自动提示管理权限(如果它们在没有 UAC 的情况下运行。)

于 2010-08-18T10:46:20.883 回答
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 应用程序。

于 2010-08-18T10:49:08.987 回答