C# 更改由安装创建的只读文件

C# 更改由安装创建的只读文件,c#,file,io,installshield,C#,File,Io,Installshield,我有一个XNA游戏,我为它创建了InstallShield安装程序。游戏将数据保存到安装位置的几个txt文件中。这在使用调试器或从bin文件夹运行时没有任何问题。但一旦安装,我需要写入首选项的txt将变为只读,因此每次尝试写入文件时,游戏都会崩溃。我怎样才能解决这个问题呢?是的,这是出于设计,我同意这个设计。一个系统上可能有多个用户,而您正在进行软件的全系统安装,因此每个用户都可以获得该软件。这些用户不应该也可能不想共享游戏保存 您应该将游戏安装到每个用户的位置,或者将保存的数据从可执行文件所在

我有一个XNA游戏,我为它创建了InstallShield安装程序。游戏将数据保存到安装位置的几个txt文件中。这在使用调试器或从bin文件夹运行时没有任何问题。但一旦安装,我需要写入首选项的txt将变为只读,因此每次尝试写入文件时,游戏都会崩溃。我怎样才能解决这个问题呢?

是的,这是出于设计,我同意这个设计。一个系统上可能有多个用户,而您正在进行软件的全系统安装,因此每个用户都可以获得该软件。这些用户不应该也可能不想共享游戏保存


您应该将游戏安装到每个用户的位置,或者将保存的数据从可执行文件所在的位置移开。无论你选择哪一个,你都已经解决了你现在面临的问题。

我看不出这个问题有足够的信息给出任何类型的答案。请添加更多详细信息。仅当文件与可执行文件位于同一文件夹中时才会发生这种情况,还是我可以将它们放在可执行文件旁边的文件夹中?@user26830当程序试图保存用户没有写入权限的某个位置时才会发生这种情况,并且与可执行文件的位置无关。如果可执行文件位于%PROGRAMFILES%\YourGame中,而保存数据位于%PROGRAMFILES%\YourGame中,则用户通常无法对其进行写入。如果可执行文件位于%PROGRAMFILES%\YourGame中,而保存数据位于%PROGRAMFILES%\YourGameData中,则用户通常仍无法对其进行写入。为什么不将游戏数据存储在%APPDATA%\YourGame中?这就是我刚才所做的,并且工作得非常完美。我只是好奇这个系统是如何工作的。非常感谢。@user26830啊,好的。为此,我可以详细说明一下:InstallShield并不专门处理文件夹权限。如果在Windows资源管理器中打开C:\Program文件的属性,并查看“安全性”选项卡,您将看到普通用户没有被授予写入权限。当InstallShield在C:\Program Files内创建子目录时,它将继承父目录的权限。当您在%APPDATA%中创建自己的目录时,其工作方式与此相同:该目录已可由用户写入,因此您无需执行任何特殊操作即可写入新创建的子目录。ProgramFiles文件夹(即使在XP上)始终受到限制,因为有限的用户无法在其中更新/创建文件。当时每个人都是管理员,没有注意到。由于UAC每个人都是有限的,除非显式提升(例如,如果确实需要管理员权限,则在程序中使用requiresAdministrator清单)。