【问题标题】:c# update program permissionc#更新程序权限
【发布时间】:2013-06-11 00:59:22
【问题描述】:

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

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

我知道我需要管理员权限才能做到这一点,我应该向用户询问,但问题是 Firefox 等其他应用程序已经这样做了,而无需向用户询问管理员权限!他们是怎么做到的?!

提前致谢!

【问题讨论】:

  • 在我们的应用程序中,我像 Google Chrome 一样执行此操作(例如):不要安装在 ProgramFiles 文件夹中,而是安装在用户的文件夹中(例如 ApplicationData)。也适用于非管理员用户。
  • @Uwe Keim 我也在考虑这个问题,很好,我想如果没有其他解决方案,这是最好的一个!然而谷歌浏览器也安装在程序文件中..我错过了什么!? :D
  • 据我回忆,我认为谷歌浏览器首先尝试ProgramFiles,如果它(默默地)失败,它会安装到ApplicationData。在我们的应用程序中,我什至懒得尝试。

标签: c# file-permissions


【解决方案1】:

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

  • 微软的数字证书是您需要跳过的。

【讨论】:

  • 请您描述一下“签署申请”是什么意思?
  • 意味着向 Microsoft 注册您的应用程序。然后,在 Manifest 文件中更改 uiAccess = true 即可提供跳过功能。不过签名有点乱。
【解决方案2】:

让你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

【讨论】:

  • 感谢您的回答,但问题是如果我这样做,windows 将再次请求许可,整个点(无需用户交互的自动更新)将丢失
【解决方案3】:

您是否尝试添加嵌入式清单来请求权限?

类似这样的:

<?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

【讨论】:

  • 首先感谢您的回答,但问题是如果我这样做,windows 将再次请求许可,整个点(无需用户交互的自动更新)将丢失
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
相关资源
最近更新 更多