.net 通过UAC写入文件和用户限制

.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

我正在编写一些处理解析文件(主要是XML,但也有一些自定义文件类型)的代码。我在解析代码方面做了一些尝试,以防加载或访问文件时出错,这些异常会被抛出到调用对象/方法

下面是一个例子:

/* 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之后。重新勾选此框将授予写入此位置的重要访问权限。“我们自己在这方面也有很多乐趣,主要是通过安装。有时只是以某种神秘的顺序关闭和再次打开东西似乎是可行的,但并不总是这样:(我们只是试图强化代码,尽早报告潜在问题,并尽量减少失败的数量。我们的经验似乎表明,将所有这些问题一起停止的说明都写在了圣杯的下面。