2

我的更新过程有问题,我的程序是用 c# 编写的,我使用 innosetup 作为我的程序安装程序,一切都很好,除了我无法更新我的文件,因为它们在程序文件中..

我已经知道数据应该保存在 ApplicationData 或 CommodApplicationData 目录中,并且我将它们用于我的配置文件,我设计了一个单独的应用程序(update.exe)来将新文件下载到 ApplicationData(这里没问题)但我想要更新。 exe 能够将下载的文件移动到我的程序文件应用程序文件夹..(update.exe 也在程序文件安装目录中)

我知道我需要管理员权限才能做到这一点,我应该要求用户这样做,但问题是其他应用程序(如 Firefox)已经这样做了,而没有要求用户提供管理员权限!他们是怎么做到的?!

先谢谢了!

4

3 回答 3

0

您是否尝试添加嵌入式清单以请求许可?

像这样的东西:

<?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">
      <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

这将告诉操作系统您的应用程序需要一些权限,例如在应用程序文件夹中复制。

您可以查看如何配置:http: //msdn.microsoft.com/en-us/library/bb756929.aspx

于 2013-06-14T11:43:10.240 回答
0

让您的update.exe程序配置以管理员身份运行。您需要修改嵌入到程序中的清单。将<requestedExecutionLevel>元素更改为:

    <trustInfo xmlns="urn:0073chemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
        <requestedExecutionLevel
            level="highestAvailable"
            UIAccess="true" />
        </requestedPrivileges>
    </security>
</trustInfo>

并将UIAccess元素设置为true. 请参阅 http://msdn.microsoft.com/en-us/library/ms742884.aspx

于 2013-06-14T11:41:29.443 回答
0

我认为他们在签署申请后会这样做。您也可以签署您的程序并按照他们的方式进行操作。如果应用程序已签名,稍后您可以运行更新程序而无需从用户那里获得管理员权限:)

  • 微软的数字证书是您需要跳过的。
于 2013-06-14T11:37:15.677 回答