.net 通过UAC写入文件和用户限制
我正在编写一些处理解析文件(主要是XML,但也有一些自定义文件类型)的代码。我在解析代码方面做了一些尝试,以防加载或访问文件时出错,这些异常会被抛出到调用对象/方法 下面是一个例子:.net 通过UAC写入文件和用户限制,.net,windows,c#-3.0,uac,.net,Windows,C# 3.0,Uac,我正在编写一些处理解析文件(主要是XML,但也有一些自定义文件类型)的代码。我在解析代码方面做了一些尝试,以防加载或访问文件时出错,这些异常会被抛出到调用对象/方法 下面是一个例子: /* main.cs */ public void LoadSomeFile (string _fullPathToFile) { //create an instance of my fileLoader object //which is just a wrapper for the in-bu
/* main.cs */
public void LoadSomeFile (string _fullPathToFile)
{
//create an instance of my fileLoader object
//which is just a wrapper for the in-built
//c# and .net methods for loading a file
FileLoader myFileLoader = new FileLoader();
try
{
//pass the fileLoader the location the file
//to be loaded
myfileLoader.LoadAFile(_directoryAndFileName);
}
catch (ParsingException parseEx)
{
//code to create or append to debug log file
}
//once the file has been loaded and parsed,
//or if it fails, close the fileLoader
myFileLoader.Close();
}
/* ParsingException class */
public class ParsingException : System.Exception
{
public ParsingException()
{
}
public ParsingException(string message, Exception innerException)
{
}
public ParsingException(string message)
: base(message)
{
}
/* in FileLoader.cs */
public void LoadAFile(string _fullPathToFile)
{
try
{
/* load the file from disk */
}
catch (FileLoadException fileLoadEx)
{
throw new ParsingException("Could not load file.\nDetails: "
+ fileLoadEx.Message);
}
catch (FileNotFoundexception fileNotFoundEx)
{
throw new ParsingException("Could not find file.\nDetails: "
+ fileNotFoundEx.Message);
}
catch (NullReferenceException nullRefEx)
{
throw new ParsingException("Could not load data from file.\nDetails: "
+ nullRefEx.Message);
}
}
我希望将解析异常(以及为此引发的任何其他异常)输出到日志文件中(文件名和格式暂时不重要,但我想到的是一个名为debug.txt的简单文本文件)。然而,由于这段软件可能会加载到不同版本的Windows上(甚至通过Mono和类似的工具/VM加载到不同的环境),因此我很关心如何放置此调试文件
我在关闭UAC的情况下构建Windows7 Professional,但如果将此软件加载到打开UAC的机器上(在XP、Vista或7上),我将在选择此调试文件的可能输出目录时受到严重限制
无论操作系统版本和UAC设置如何,是否有我的软件一定能够输出到的特定目录?我认为软件的启动路径应该是正常的(例如Program Files\My Project\或Program Files(x86)\My Project\),但是否会出现无法访问的情况?(当然,除了启动目录被设置为只读之外)或者是否有任何目录可以证明更适合这种情况?我希望能找到一个用户可以轻松导航的目录。不启用UAC on程序文件 看看环境,特别的文件夹。LocalApplicationData是一个合理的选择 标准的窍门是在它下面为你的公司创建一个文件夹,然后在它下面为你的应用创建一个文件夹,然后把你的文件放进去
已知位置和UAC不会影响它。除了Tony建议的,您还可以使用隔离存储
很抱歉回复太晚。我们最终实现了这个,除了在一个孤立的实例中,它导致了一个问题。我们的解决方案已安装在客户机上。客户端以管理员身份运行软件,并已关闭UAC,但get的“System.UnauthorizedAccessException:拒绝访问路径”。然而(这就是奇怪的地方),如果客户端重新启用UAC,他们就不会得到UnahorizeAccessException。有什么想法或建议吗?显然,他们的IT政策是我们无法控制和不了解的。我猜,当UAC开启时,它会被放在虚拟商店中。当您谈论以管理员身份运行时,请确保您和用户在同一页面上。“这似乎与我的访问权限有关,即使我是这台电脑的管理员。我甚至尝试在Windows中关闭UAC,但没有任何效果。”然后,稍后:“我取消了“以管理员身份运行”框的复选框(在快捷方式的属性上,在兼容性下)在作为测试的一部分重新启用UAC之后。重新勾选此框将授予写入此位置的重要访问权限。“我们自己在这方面也有很多乐趣,主要是通过安装。有时只是以某种神秘的顺序关闭和再次打开东西似乎是可行的,但并不总是这样:(我们只是试图强化代码,尽早报告潜在问题,并尽量减少失败的数量。我们的经验似乎表明,将所有这些问题一起停止的说明都写在了圣杯的下面。