我的WPF应用程序(一个简单的答题器游戏)有问题。我刚刚使用Visual Studio的Microsoft Visual Studio安装程序项目扩展进行了部署/创建了安装项目。一切似乎工作正常,安装程序运行良好(在其他计算机上测试),此外,已安装的应用程序几乎可以正常运行。唯一的例外是按钮调用函数,该函数正在安装该应用程序的文件夹中创建一个新的txt文件(类似“保存”文件的草稿)。单击此按钮会导致整个应用程序立即崩溃。什么都没有发生,没有错误消息,该应用程序仅关闭。
我认为问题出在文件夹/管理员权限的访问权限上。
我已经使用安装程序项目中的“文件系统”窗口在应用程序文件夹中添加了具有相同名称的txt文件,并再次进行了部署和安装。即使文件存在,问题也会再次发生(可能是由于尝试覆盖文件内容时的访问权限)。
在通过VS运行应用程序时一切正常运行,同时在任何计算机上使用.exe都可以正常工作可能很重要。问题仅在于使用安装程序安装的应用程序。
我不确定问题出在哪里,所以很难显示一些代码,老实说,我什至不确定代码是否有问题,也许可以通过设置一些安装项目属性来解决?
我想在两个会话之间本地存储一些数据,我选择了txt文件,因为它虽然不是最优雅的方式,但它既轻巧又简单。 我希望已安装的应用程序能够在其文件夹中创建并覆盖txt文件。
P.S。如果您需要任何代码,屏幕截图或有关我的设置的信息,请在评论部分让我知道,我将提供必要的信息
答案 0 :(得分:0)
在您安装程序时,您具有管理员权限。因此,应用程序所在的文件夹也是使用管理员权限创建的。
如果要将数据存储到此文件夹,则必须以管理员身份运行应用程序。 (不是最好的主意)
否则,您可以更改代码以在运行时将文件写入到不需要管理员权限的其他位置。
例如:
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”
关于保存文件的一些错误处理将非常好并且很有帮助;)
答案 1 :(得分:0)
谢谢大家的解决方案和知识,问题出在我的假设之中(访问路径被拒绝)。 我正在使用此代码创建路径:
Directory.GetCurrentDirectory() + "\\SyntyhCitySave.txt";
在特殊目录而不是应用程序文件夹中创建文件是可行的,这是解决我的问题的方法:
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\SyntyhCitySave.txt";
tomtom标记为已接受。