【问题标题】:My installed WPF app is crashing while trying to create a file我安装的 WPF 应用程序在尝试创建文件时崩溃
【发布时间】:2019-05-14 01:17:57
【问题描述】:

我的 WPF 应用程序(一个简单的点击游戏)有问题。我刚刚使用 Visual Studio 的 Microsoft Visual Studio Installer Projects 扩展进行了部署/创建了一个安装项目。一切似乎都运行良好,安装程序运行良好(在其他计算机上测试)而且安装的应用程序几乎可以正常运行。唯一的例外是按钮调用函数,它在安装应用程序的文件夹中创建一个新的 txt(类似于“保存”文件的草稿)文件。单击此按钮会导致整个应用程序立即崩溃。没有其他反应,没有错误消息,应用程序只是关闭。

我认为问题在于文件夹/管理员权限的访问权限。

我在安装项目中使用“文件系统”窗口在应用程序文件夹中添加了同名的txt文件,再次部署并安装。即使文件存在,问题也会再次发生(可能是因为尝试覆盖文件内容时的访问权限)。

通过 VS 运行应用程序时一切正常可能很重要,而且使用 .exe 在任何计算机上都可以正常工作。问题仅在于使用安装程序安装的应用程序。

我不确定问题出在哪里,所以很难显示一些代码,说实话我什至不确定这是否是代码的问题,也许可以通过设置一些设置项目属性来解决?

我想在两个会话之间在本地存储一些数据,我选择了 txt 文件,因为它既轻巧又简单,即使它不是最优雅的方式。 我希望已安装的应用程序能够在其文件夹中创建和覆盖 txt 文件。

附:如果您需要有关我的设置的任何代码、屏幕截图或信息,请在 cmets 部分告诉我,我将提供必要的内容

【问题讨论】:

  • 正如我所说,使用 VS 运行时一切正常。只有在部署应用程序时才会出现问题
  • 您将文件保存在哪里?你可以发布保存txt文件的代码吗?您还可以围绕您认为导致问题的代码进行一些异常处理,并且在 catch 中您可以生成一个显示错误消息的消息对话框。可能会让您更好地了解正在发生的事情。
  • 需要查看代码以了解如何构建文件路径。已安装的应用程序将驻留在“程序文件”文件夹中,您可能无权访问它。您可能需要考虑将此类数据存储在 ApplicationData 文件夹中。阅读本文了解更多信息:stackoverflow.com/questions/9659127/…
  • social.technet.microsoft.com/wiki/contents/articles/… 您只需将 bin/Release 的内容复制到某个文件夹即可“安装”应用程序。如果这只是您正在尝试的东西,那么您最简单的选择可能就是将您的 exe 和 dll 复制到“我的游戏”中的文件夹中

标签: wpf visual-studio release setup-deployment


【解决方案1】:

在您安装程序的那一刻,您拥有管理员权限。因此,您的应用程序所在的文件夹也是使用管理员权限创建的。

如果您想将数据存储到此文件夹,您必须以管理员身份运行您的应用程序。 (不是最好的主意)

否则,您可以更改代码以在运行时将文件写入不需要管理员权限的其他位置。

例如:

string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

会给你:“C:\Users\MyUserName\AppData\Local”

string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

会给你:“C:\Users\MyUserName\AppData\Roaming”

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

会给你:“C:\Users\MyUserName\Documents”

在保存文件时进行一些错误处理会非常有用;)

【讨论】:

  • 你说得对,谢谢。正如我所假设的,错误消息仅返回“拒绝访问路径”。您的解决方案对我有用,这是由于我对特殊文件夹访问权限的了解造成的。感谢您的知识和解决方案!
【解决方案2】:

感谢大家的解决方案和知识,问题正如我所假设的那样(访问路径被拒绝)。 我正在使用此代码创建路径:

Directory.GetCurrentDirectory() + "\\SyntyhCitySave.txt";

在特殊目录而不是应用程序文件夹中创建文件有效,这就是我的问题的解决方案:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\SyntyhCitySave.txt";

Tomtom 答案标记为已接受。

【讨论】:

    猜你喜欢
    • 2015-09-06
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多