当我用二进制阅读器阅读文件时:
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获取路径。
我找到了如何在启动时以管理员身份运行程序的方式,但有没有办法如何在这样的路径上访问文件?我可以通过运行命令将该文件复制到其他路径作为管理员,但它不是解决方案。
感谢您的回复
答案 0 :(得分:3)
using (FileStream FilStr = new FileStream(path, FileMode.Open))
这里真正的问题是您对文件的访问权限不够具体。你编写它的方式,你把它留给FileStream来选择文件访问。它将选择FileAccess.ReadWrite。您不会在C:\目录中获取它,它在没有UAC提升的情况下受到写访问保护。你不需要它,你只是从文件中读取。
修正:
using (FileStream FilStr = new FileStream(path, FileMode.Open, FileAccess.Read))
答案 1 :(得分:1)
仅在流程启动时执行提升。因此,在过程的生命周期中无法提升。你必须在启动时一劳永逸地做出决定。
应用程序通常执行的操作是启动新进程以执行需要提升的特定任务。您可以启动应用程序传递命令行参数的新实例,并使用runas
动词请求提升。或者,您可以使用提升的进程外COM服务器来完成工作。前者设置得更快,但后者更清晰。
答案 2 :(得分: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 强>