我使用VS2008安装项目创建了一个.msi.我的应用程序经常在应用程序目录(C:\ Program Files\MyApp\MyFile.txt)中的.txt文件中写入一些值.在Win7中进行测试之后,它引发了一个例外"访问路径......被拒绝了".
但每当我以管理员身份运行它时,都不会发生此类异常.这是我的sscce
string FilePath=Application.StartupPath + @"\AppSettings\CurrentUserName.inf";
using (StreamWriter writer=new StreamWriter(FilePath,false))
{
writer.Write(txtLoginName.Text.Trim());
}
MainForm.ProcessLogIn();
this.DialogResult = DialogResult.OK;
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题.有什么建议吗?
将文件移出Program Files目录.在Win7中只适用于普通用户.
您可以在ProgramData目录中移动该文件.
您的安装程序应该为您的应用程序创建一个目录.
然后在代码中使用这些代码行检索正确的完整路径名
string dataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData));
string appFile = Path.Combine(dataPath, "MyAppDir", "MyFile.txt");
Run Code Online (Sandbox Code Playgroud)
通常(在Win7上)这个结果就像这样的路径
c:\programdata\MyAppDir\MyFile.txt
Run Code Online (Sandbox Code Playgroud)
但是使用SpecialFolder枚举,您可以保证在您的应用程序中使用readwrite中可用的文件夹,而不依赖于当前的操作系统.
解决此问题的唯一方法是不写入该文件夹.您不能按照惯例写入该文件夹,遗憾的是,旧版本的Windows并不能阻止您这样做.
相反,您可以Environment.SpecialFolder用来帮助您找到您需要去的地方:
// your application data for just that User running the app
var perUserAppData = Environment.GetFolderPath(
Environment.SpecialFolder.ApplicationData);
// your application data for ALL users running the app
var allUsersAppData = Environment.GetFolderPath(
Environment.SpecialFolder.CommonApplicationData);
// better!
var path = Path.Combine(perUserAppData, @"MyApp\MyFile.txt");
Run Code Online (Sandbox Code Playgroud)
基本上,Windows 7告诉您,您将不得不停止在人行道上行驶并按预期使用街道.
| 归档时间: |
|
| 查看次数: |
14385 次 |
| 最近记录: |