从 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提示仅用于读取此文件?-用户使用文件打开对话框获取路径。

我找到了如何在启动时以管理员身份运行程序的方法,但是有没有办法在这样的路径上访问文件?我可以通过以管理员身份运行命令将该文件复制到其他路径,但它不是解决方案。

感谢您的回复

从 c# 读取文件时提示 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