Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#更新程序权限_C#_File Permissions - Fatal编程技术网

c#更新程序权限

c#更新程序权限,c#,file-permissions,C#,File Permissions,我的更新过程有问题,我的程序是用c#编写的,我使用innosetup作为我的程序安装程序,一切都很好,只是我不能更新我的文件,因为它们在程序文件中 我已经知道数据应该保存在ApplicationData或CommodApplicationData目录中,我正在将它们用于配置文件,我设计了一个单独的应用程序(update.exe)将新文件下载到ApplicationData(这里没有问题)但我希望update.exe能够将下载的文件移动到我的程序文件应用程序文件夹中。。(update.exe也位于

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

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

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


提前感谢

我想他们是在申请书签字后才这样做的。 你也可以签署你的计划,并按照他们做的一样。 如果应用程序已签名,以后您可以运行更新程序而不获得 来自用户的管理员权限:)

  • 您需要跳过microsoft的数字证书

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

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

并将
UIAccess
元素设置为
true
。 看见

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

大概是这样的:

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


在我们的应用程序中,我像Google Chrome(例如):不要安装在
ProgramFiles
文件夹中,而是安装在用户文件夹中(例如
ApplicationData
)。对非管理员用户也很有效。@Uwe Keim我也在考虑,非常好的一点,我想如果没有其他解决方案,这是最好的解决方案!然而谷歌chrome也安装在程序文件中。。我错过了什么!?:从我的记忆中,我认为Google Chrome会首先尝试
程序文件
,如果它(无声地)失败,它会安装到
应用程序数据
。在我们的应用程序中,我甚至懒得尝试。您能描述一下“签名应用程序”是什么意思吗?意思是,向Microsoft注册您的应用程序。然后,在清单文件中更改uiAccess=true将提供跳过功能。签名有点麻烦。首先感谢您的回答,但问题是如果我这样做,windows将再次请求权限,而整点(无需用户交互的自动更新)将丢失感谢您的回答,但问题是如果我这样做,windows将再次请求权限并整点(无用户交互的自动更新)将丢失