2011-10-24 299 views
1

我曾对类似问题的一些答案进行过侦察,但他们并没有真正帮助我。写入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文件夹创建的文件/文件夹,即使我没有提升权限,它仍然会在后续执行中创建成功。

我现在的问题是,我现在不能在任何可用的开发机器上重复崩溃,我不知道如何将机器放回到可以使用的状态。

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

+0

我注意到,有时如果我将exe文件复制到有问题的机器上的其他位置,然后运行它,我现在可以重复这个问题(问题是一个不受监视的SecurityException),但是如果我运行调试代码从Visual Studio中不会发生问题 - Visual Studio是否使用提升的权限运行代码? –

+0

我可以推荐使用'Path.Combine(GetUserFolder(),“Resources”);' – aligray

回答

3

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

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

https://www.virtualbox.org/

太相关的问题本身,我不知道一个更好的办法,而不是在虚拟机上安装VS用于测试目的。

+0

好主意,我的虚拟机在我的mac上运行,我会试着看看我能否重复这个问题。 –

+0

关于虚拟机上的调试/测试,您应该使用远程调试器。如果虚拟机不属于同一网络,则可能会存在一些权限问题(请参阅:http://www.wictorwilen.se/Post/How-to-get-Remote-Debugging-work-properly.aspx) – Reddog

0

+1给Erik的VM解决方案来解决问题。

对于跟踪权限问题考虑使用将procmon(http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) - 将显示enverything你曾经想(而不是:))有关的工序,制作文件/ regisstry访问。我建议首先在机器上多次尝试它,在该程序中,您的程序可以正常工作,为您的过程获得过滤设置并了解应该发生的情况。