【发布时间】:2011-12-14 11:29:24
【问题描述】:
我已经对类似问题的一些答案进行了侦察,但他们并没有真正帮助我。
我有一个应用程序,其中嵌入了一些资源。启动时,应用程序会检查资源是否存在于 appdata 文件夹中,如果不存在,则在加载模板文件之前将嵌入资源中的模板文件复制到 appdata 文件夹,然后将 appdata 文件夹中的资源用作工作副本。
我有一个帮助类,其中包括返回 appdata 和资源子文件夹,如下所示:
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 文件夹中删除它创建的文件/文件夹,即使我不提升权限,它仍然会在后续执行中成功创建。
我遇到的问题是,我现在无法在任何可用的开发机器上重复崩溃,而且我不知道如何将机器恢复到我可以恢复的状态。
任何人都对可能导致问题的原因有任何想法,或者我如何能够将机器恢复到“原始”状态以能够重复崩溃并帮助我追踪它。
【问题讨论】:
-
我注意到有时如果我将 exe 复制到有问题的机器上的不同位置然后运行它,我现在可以重复问题(问题是未经处理的 SecurityException),但是如果我从 Visual Studio 中运行调试代码,则不会出现问题 - Visual Studio 是否以提升的权限运行代码?
-
我可以推荐使用
Path.Combine(GetUserFolder(), "Resources");
标签: c# .net file permissions