【问题标题】:can't open my isolated storage file when i move my application exe移动应用程序 exe 时无法打开隔离的存储文件
【发布时间】:2012-03-13 19:24:48
【问题描述】:

我在我的 C# .net 应用程序中使用了独立存储技术。

我的应用程序在关闭时将数据保存在独立存储中名为 MyData.dat 的文件中。

当我打开我的应用程序时,它会重新加载该数据并将其打印在屏幕上。

当我将我的应用程序移动到另一个目录时,例如从 D:\MyApp.exe 到 D:\Apps\MyApp.exe,然后从它的新目录运行应用程序,它无法加载文件 MyData.dat ( FileNotFoundException),因为它在不同的地方寻找不同的 MyData.dat 文件..

有人知道如何将我的隔离文件 - MyData.dat 文件保存在一个无论我从哪里打开 App.exe 都会找到它的地方吗?

【问题讨论】:

  • 获取商店的代码是什么样的(例如 GetStore)?
  • 我尝试了 IsolatedStorageFile.GetUserStoreForAssembly()。它没有用,所以我尝试了:IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly | IsolatedStorageScope.Roaming, null, null) 这也不起作用..

标签: c# .net isolatedstorage isolatedstoragefile


【解决方案1】:

检查 IsolatedStorage 在这两种情况下检索的目录。即使机器相同,预期对于同一应用程序在不同位置的存储路径也可能不同。

Get isolation storage path

【讨论】:

  • 我看不出它对我有什么帮助。我知道文件的保存位置。它位于 %appdata%\isolatedstorage\{GUID}\MyData.dat 上,它为应用程序的每次运行创建不同的 {GUID} 目录
  • 考虑到您说的是c#不是 silverlight,我想说为什么不使用AplicationData?在里面创建你的应用程序的目录并将数据保存在 that 文件夹中。因此,您的应用程序特定数据的预期位置可能会在您的应用程序在该电脑上的位置方面保持不变。
  • 是的,实际上这就是我最终所做的,但现在我没有使用隔离存储,而是使用常规 FileStream..
【解决方案2】:

您可以使用IsolatedStorageFile.GetUserStoreForAssembly 获取您可以使用的商店,只要组件标识不变。所以它也将独立于 exe 文件的位置。见MSDN Article

【讨论】:

  • 我试过这个方法。当我移动 exe 时它不会工作。你可以自己试试……
  • IsolatedStorage 使用密码签名来识别您的程序集,因此您必须对程序集进行签名。如果程序集未签名并移动到其他位置,则程序集域标识将更改,并且之前的隔离存储将不可用。
【解决方案3】:

我认为您的程序集信息在某种程度上发生了变化。例如,在移动您的 exe 之前,它是 1.0.0.0 版本,而在另一个目录中,您放置了不同的 1.0.0.1 版本。在这种情况下,这两个不同版本的隔离存储位置(请参阅另一个答案)中应该有两个单独的目录。

或者有可能是您第一次在 VS 中以调试模式运行应用程序,然后您移动了 exe 并直接运行它。在这种情况下,应该有两个不同的目录,例如 yourappnameyourappname.vschost

无论如何,请检查您的隔离存储位置以获取更多信息。

【讨论】:

    【解决方案4】:

    我自己尝试过,我注意到,当您将应用程序移到另一个文件夹中时,IsolatedStorageFile 实例上的 AssemblyIdentity 会发生变化。

    为防止这种情况发生,您必须对程序集进行签名,然后才能将应用程序移动到另一个文件夹中,并且仍然为隔离的存储文件使用相同的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      相关资源
      最近更新 更多