c#win7:unauthorizedaccessexception

时间:2009-06-14 18:27:30

标签: c# windows-7

我正在用c#为Windows7编写一个非常好的程序... 但现在我开始构建一个将程序文件复制到“C:\ Program Files”的设置。

现在程序在该文件夹中有很多问题:

1)如果我取消OpenFileDialog,我将获得异常

2)我的程序不再将文件写入AppData文件夹

3)由于权限

,程序无法在自己的目录中打开实习文件

我不知道我能做些什么...

有人可以帮助我吗?

修改

也许你不明白我的问题。

我编写了一个在C:\ myprogram中工作正常的程序。 我制作了一个安装程序,将文件复制到C:\ Program Files目录中,当我将文件复制到该目录时,它是一样的

  • 我的程序仅在自己的目录中打开文件
  • 我的程序 AppData文件夹
  • 中打开并写入文件
  • 我的程序可以在rtb中打开像.txt这样的文件。那里将使用OpenFileDialog

这3分不起作用!

如果我的程序在Program Files文件夹中,则无法打开像C:\ Program Files \ myprogram \ xsl \ test.xsl这样的文件,无法将文件写入AppData文件夹。

如果我将程序安装到C:\ lalala中,它将起作用!

4 个答案:

答案 0 :(得分:5)

好的 - 我找到了答案:

我必须使用

FileStream fs = File.OpenRead(tmpfile)

而不是

FileStream fs = new FileStream(tmpfile, FileMode.Open);

答案 1 :(得分:1)

要将文件复制到Program Files或任何特权位置,该进程必须由提升的管理员运行。由于您正在谈论“复制”文件和“OpenFileDialog”,听起来您正在运行.NET进程来执行复制,而不是Windows Installer。通常,这应该由安装程序而不是您的应用程序完成。您的应用需要在其清单中设置requireAdministrator或仅为该特定操作提升。有关详细信息,请阅读UAC。首先,我建议您阅读CodePlex上的UAC: The Definitive Guide

答案 2 :(得分:1)

你真的应该使用Windows安装程序。它处理与instasllation相关的问题,并确保提升其权限级别以完成必要的工作。

如果您没有正确升级,UAC将在幕后做很多事情,这会完全改变您的程序看到文件系统的方式。

此外,当您打开程序目录中的文件时,您只能以只读模式打开这些文件,或者您将获得文件异常。

答案 3 :(得分:1)

或者,如果这个上面的解决方案不起作用('System.IO.FileStream'不包含带有1个参数的构造函数),那么试试这个:

FileStream file = new FileStream(fileName,FileMode.Open,FileAccess.Read);