写入appdata文件夹 - 权限问题?

时间:2011-10-24 20:57:44

标签: c# .net file permissions

我有一些关于类似问题的答案,但他们并没有真正帮助我。

我有一个应用程序,我已经嵌入了一些资源。在启动时,应用程序会检查appdata文件夹中是否存在资源,如果没有,则在加载它们之前将模板文件从嵌入资源复制到appdata文件夹,然后使用appdata文件夹中的模板文件作为工作副本。

我有一个帮助类,除其他外还返回appdata和resources子文件夹,如下所示:

class Folders
{
    static public String GetUserFolder()
    {
        return Application.LocalUserAppDataPath;
    }

    static public String GetResourcesFolder()
    {
        // If the resources folder does not exist then create it
        String userFolder = GetUserFolder();
        String resourcesFolder = userFolder + "\\Resources";

        if (!Directory.Exists(resourcesFolder))
        {
            Directory.CreateDirectory(resourcesFolder);
        }
        return resourcesFolder;
    }

    ...

所以我的代码调用GetResourcesFolder方法,该方法返回路径(如果需要,在进程中创建文件夹)检查文件是否存在以及它是否尝试使用以下内容写入:

        String filename = Helpers.IO.Folders.GetResourcesFolder() + "\\data.dat";
        FileStream outFile = System.IO.File.OpenWrite(filename);

所以我设置了场景,这段代码正在我开发办公室里的所有机器上运行。然而,一些非现场的同事抱怨它在他们的机器上“崩溃” - 在每种情况下都是一台XP机器 - 但是不会从他们那里回来的很多有用的信息 - 试图从他们那里获得更多信息。我在办公室里安装了XP机器,它没有遇到任何问题。

在挖掘出一些之前被“存档”的旧的开发机器之后,我也成功地在两台xp(sp2)机器上崩溃了。在两种情况下,崩溃似乎与写入权限相关,并且使用“运行方式...”运行应用程序已解决问题并且它正确执行。但是,一旦应用程序成功运行,一旦应用程序不再崩溃,即使我从appdata文件夹中删除它创建的文件/文件夹,即使我不提升权限,它仍会在后续执行时成功创建。

我遇到的问题是我现在不能再对任何可用的开发机器重复崩溃了,而且我不知道如何将机器重新置于我能够的状态。

任何人都对可能导致问题的原因有任何想法,或者我如何能够将机器恢复到“处女”状态以便能够重复崩溃并帮助我追踪它。

2 个答案:

答案 0 :(得分:3)

一个行动方案是创建XP的虚拟机。您可以在安装之前保存机器的状态以进行测试。安装后,只需恢复到之前的状态再次测试。有一些供应商提供免费的虚拟机:

http://www.microsoft.com/windows/virtual-pc/

https://www.virtualbox.org/

与相关问题本身一样,我不知道比在虚拟机上安装VS以进行测试更好的方法。

答案 1 :(得分:0)

+1 Erik的VM解决方案,用于重新定位问题。

为了追踪权限问题,请考虑使用ProcMon(http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) - 将显示有关进程所进行的文件/注册访问的所有内容(而不是:))。我建议首先在机器上多次尝试它,你可以在程序中正常工作,为你的过程设置过滤设置,并了解应该发生什么。

相关问题