2

我正在用 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

4 回答 4

5

好的 - 我找到了答案:

我必须使用

FileStream fs = File.OpenRead(tmpfile)

代替

FileStream fs = new FileStream(tmpfile, FileMode.Open);
于 2009-06-14T20:38:43.580 回答
1

或者,如果上述解决方案不起作用('System.IO.FileStream' 不包含带 1 个参数的构造函数),请尝试以下操作:

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

于 2012-02-06T14:17:38.580 回答
1

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

于 2009-06-14T18:55:57.833 回答
1

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

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

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

于 2009-06-14T19:19:02.880 回答