从 c# 读取文件时提示 UAC
本文关键字:提示 UAC 文件 读取 | 更新日期: 2023-09-27 18:33:43
当我使用二进制读取器读取文件时:
using (FileStream FilStr = new FileStream(MainPreferenceModel.Instance.PrintHeader.CompanyLogoFilePath, FileMode.Open))
{
using (BinaryReader BinRed = new BinaryReader(FilStr))
{
HeaderFooterReportModel.Logo = BinRed.ReadBytes((int)BinRed.BaseStream.Length);
BinRed.Close();
}
FilStr.Close();
}
没关系,但是当打开文件(例如 C:''logo)时.jpg它会抛出异常。是否可以获取UAC提示仅用于读取此文件?-用户使用文件打开对话框获取路径。
我找到了如何在启动时以管理员身份运行程序的方法,但是有没有办法在这样的路径上访问文件?我可以通过以管理员身份运行命令将该文件复制到其他路径,但它不是解决方案。
感谢您的回复
using (FileStream FilStr = new FileStream(path, FileMode.Open))
这里真正的问题是您对要访问文件的权限不够具体。 按照您编写它的方式,您可以将其留给 FileStream 来选择文件访问。 它将选择FileAccess.ReadWrite。 你不会在 C:'' 上得到它目录,它受到保护,无需 UAC 提升即可进行写入访问。 而且您不需要它,您只是从文件中读取。
修复:
using (FileStream FilStr = new FileStream(path, FileMode.Open, FileAccess.Read))
提升仅在进程启动时执行。因此,在流程的生命周期中没有办法提升。您必须在启动时一劳永逸地做出决定。
应用程序通常执行的操作是启动新进程以执行需要提升的特定任务。可以启动应用程序的新实例,传递命令行参数并使用 runas
谓词请求提升。或者,可以使用提升的进程外 COM 服务器来完成这项工作。前者设置更快,但后者是更干净的解决方案。
您必须
创建/修改应用程序清单,如以下Microsoft示例所示(对于名为 IsUserAdmin.exe 的程序集):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
更多信息在这里:http://msdn.microsoft.com/en-us/library/bb756929.aspx