c#更新程序权限
我的更新过程有问题,我的程序是用c#编写的,我使用innosetup作为我的程序安装程序,一切都很好,只是我不能更新我的文件,因为它们在程序文件中 我已经知道数据应该保存在ApplicationData或CommodApplicationData目录中,我正在将它们用于配置文件,我设计了一个单独的应用程序(update.exe)将新文件下载到ApplicationData(这里没有问题)但我希望update.exe能够将下载的文件移动到我的程序文件应用程序文件夹中。。(update.exe也位于程序文件安装目录中) 我知道我需要管理员权限才能做到这一点,我应该向用户要求,但问题是像Firefox这样的其他应用程序已经做到了,而没有向用户要求管理员权限!他们是怎么做到的c#更新程序权限,c#,file-permissions,C#,File Permissions,我的更新过程有问题,我的程序是用c#编写的,我使用innosetup作为我的程序安装程序,一切都很好,只是我不能更新我的文件,因为它们在程序文件中 我已经知道数据应该保存在ApplicationData或CommodApplicationData目录中,我正在将它们用于配置文件,我设计了一个单独的应用程序(update.exe)将新文件下载到ApplicationData(这里没有问题)但我希望update.exe能够将下载的文件移动到我的程序文件应用程序文件夹中。。(update.exe也位于
提前感谢 我想他们是在申请书签字后才这样做的。 你也可以签署你的计划,并按照他们做的一样。 如果应用程序已签名,以后您可以运行更新程序而不获得 来自用户的管理员权限:)
- 您需要跳过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将再次请求权限并整点(无用户交互的自动更新)将丢失