2009-06-14 88 views
2

我在c#中编写了一个程序,用于Windows7,效果很好...... 但是现在我开始构建一个将程序文件复制到“C:\ Program Files”的设置。c#win7:unauthorizedaccessexception

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

1)如果我取消一个OpenFileDialog我会得到一个异常

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

3)程序在自己的目录无法打开,因为许可实习生文件

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

有人可以帮助我吗?

编辑:

也许你不明白我的问题。

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

  • 我的程序只打开文件在其自己的目录
  • 我的程序打开,并在应用程序数据文件夹
  • 我的程序可以打开文件,就像在RTB .TXT写道文件。将使用OpenFileDialog

这3点不起作用!

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

如果我将我的程序安装到C:\ lalala,它将工作!

回答

5

好了 - 我找到了答案:

我必须使用的

FileStream fs = File.OpenRead(tmpfile) 

代替

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

要将文件复制到Program Files或任何特权位置,该进程必须由高级管理员运行。由于您正在讨论“复制”文件和“OpenFileDialog”,这听起来像您正在运行.NET进程来执行复制,而不是Windows安装程序。通常,这应该由安装程序而不是您的应用程序完成。您的应用程序需要在其清单中设置requireAdministrator,或者仅针对该特定操作升级。欲了解更多信息,你应该阅读UAC。首先,我建议您在CodePlex上阅读UAC: The Definitive Guide

1

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

如果你没有适当地提升UAC,可以在幕后做很多事情,这可以完全改变你的程序看到文件系统的方式。

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

1

或者,如果这上面的解决方案无效(“系统。 IO.FileStream'不包含带1个参数的构造函数),那么试试这个:

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

相关问题