2

当我用二进制阅读器读取文件时:

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 提示?-user 使用 FileOpenDialog 获取路径。

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

谢谢您的回复

4

3 回答 3

3
  using (FileStream FilStr = new FileStream(path, FileMode.Open))

这里真正的问题是您对文件的访问权限不够具体。您编写它的方式,您将它留给 FileStream 来选择文件访问。它会选择 FileAccess.ReadWrite。您不会在 C:\ 目录中获得它,它受到保护,可以在没有 UAC 提升的情况下进行写访问。你不需要它,你只是从文件中读取。

使固定:

  using (FileStream FilStr = new FileStream(path, FileMode.Open, FileAccess.Read))
于 2013-10-03T18:55:13.223 回答
1

提升仅在流程启动时执行。因此,在流程的生命周期内没有办法提升。您必须在启动时一劳永逸地做出决定。

应用程序通常做的是启动新进程来执行需要提升的特定任务。您可以启动应用程序的新实例,传递命令行参数并使用runas动词来请求提升。或者,您可以使用提升的进程外 COM 服务器来完成这项工作。前者设置起来更快,但后者是更清洁的解决方案。

于 2013-10-03T17:46:17.287 回答
0

您必须像在此 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

于 2013-10-03T17:40:30.610 回答