其他分享
首页 > 其他分享> > C MSI包管理权限

C MSI包管理权限

作者:互联网

这是我遇到的问题,

我有一个C应用程序,通过将数据写入.txt文件运行,我想为应用程序创建一个MSI包.

当我构建并运行我的应用程序时,一切都很好,但是当我运行MSI安装文件时,创建的应用程序确实被授予了正确的权限.

我找不到允许应用程序写入所需的.txt文件的方法,即使我将它们包含在包中并将它们设置为系统文件.

如果我“以管理员身份运行”一切都很好,但这并不合理,因为我需要它在“以用户身份运行”时运行.

无论如何在安装时提示用户同意具有管理员权限的安装,因此不必在每次启动提示之前手动完成.

任何可以让我的代码再次运行的东西都会非常棒,谢谢.

解决方法:

更长的写入:System.UnauthorizedAccessException while running .exe under program files(除了下面列出的选项之外的其他几个选项).

每用户文件夹:我认为您应该将有问题的文件安装到每个用户文件夹(可写入用户 – 例如我的文档),或作为每个机器文件夹的模板(对于普通用户不可写) – 例如%ProgramFiles%)然后让您的应用程序将模板从每台机器位置复制到当前用户的“我的文档”文件夹 – 例如.然后你写入那里的文件 – 普通用户将拥有写访问权限.我想你也可以写一个为用户设置访问权限的网络共享.

提升:有可能,到require the application to run elevated(链接可能已过时 – for .NET it is slightly different),但这对于像写入文本文件这样简单的事情来说是一种可怕的方法.我永远不会要求这样的提升.提升的权利是普遍的,你不希望你的应用程序与城市的密钥一起运行 – 你成为一个黑客目标,你的工具中的错误变得武装和危险.

ACL修改:还可以将文本文件安装到每个计算机的位置,并对它们应用ACL权限,以便它们对于常规用户是可写的,即使它们没有提升权限也是如此. There is some information on how to do this here(项目符号第2点).这种方法在这个时代不受欢迎,但它会起作用.请注意,您的ACL权限不应过于紧张,以防您在写入操作期间写入新文件,删除旧文件并将新文件重命名为旧名称 – 除文件外还需要文件创建写得很明显 – 在NTFS中有非常精细的控制. GenericWrite应该做我认为的技巧.

一些链接(松散连接,添加以便于检索):

> Create folder and file on Current user profile, from Admin Profile
> Why is it a good idea to limit deployment of files to the user-profile or HKCU when using MSI?
> Create a .config folder in the user folder

标签:writing,c,windows-installer,package,privileges
来源: https://codeday.me/bug/20190929/1834148.html