Windows 7 中的未经授权访问异常

4
我有一个应用程序,在启动时会读取许可证文件。我的安装程序会在 Program Files 文件夹中创建应用程序文件夹,创建许可证文件夹,并将许可证文件放入其中。然而,当我尝试运行应用程序并读取/更新许可证文件时,出现了“未经授权的访问异常”。我已以管理员身份登录,并手动运行程序,但仍无法访问该文件。
您知道为什么即使路径正确,我也无法访问该文件吗?但是在安装过程中,它可以成功创建文件和文件夹?
我有 MyApplication.exe 文件,我的许可证阅读器位于名为 MyApplicationTools 的单独 DLL 中。我像这样读写许可证文件:
       //Read
       StreamReader reader = new StreamReader(path + "license.lic");

       //Write
       StreamWriter writer2 = new StreamWriter(path + "License.lic");
       string str = Convert.ToBase64String(sharedkey.Key);
       writer2.WriteLine(str);
       writer2.Close();

谢谢


你确定程序正在以管理员身份运行吗? - Kevin Montrose
非常感谢大家。我完全错了!看到这个应用程序数据文件夹很有趣! - user53885
3个回答

4
因为用户账户控制(UAC)的缘故,您的程序没有获取管理员权限。 请右键点击程序,选择“以管理员身份运行”,然后再试一次。 您也可以创建一个清单文件,告诉Windows始终以管理员身份运行,具体方法请参见此处。 不过,您应该考虑将许可证文件放在用户的AppData文件夹中,这样就不需要管理员权限了。
顺便提一下,您应该使用Path.Combine方法来创建路径。 如果您只想向文件写入单个字符串,您应该调用File.WriteAllText方法。 例如:
File.WriteAllText(Path.Combine(path, "License.lic"), Convert.ToBase64String(sharedkey.Key));

3

请使用AppData。有一个环境变量可以使用。您可以进入资源管理器并输入%appdata%来查看此变量。它会带您到相应的文件夹。要在C#中访问此文件夹,我编写了以下函数。

    /// <summary>
    /// Gets the path where we store Application Data.
    /// </summary>
    /// <returns>The Application Data path</returns>
    public static string GetAppDataPath()
    {
        string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        dir = System.IO.Path.Combine(dir, "MyCompany\\MyApplication");
        System.IO.Directory.CreateDirectory(dir);

        return dir;
    }

1
如果目录已经存在,CreateDirectory 不会抛出异常,因此您不需要单独检查。 - SLaks

2

您需要将可写文件放在用户应用程序文件夹中,普通用户无法在Program Files中进行写操作。据我所知,在Win7上,默认位置为C:\ Users \ [username] \ AppData \ [appname]。您不应该以管理员身份运行,只是为了写入Program Files。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接