You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需管理员权限向Program Files (x86)写入文件?

解决办法

核心逻辑:不要在Program Files (x86)目录下写入用户数据——这是Windows系统的安全限制,普通用户没有该目录的写入权限。正确的做法是将保存文件放到Windows为每个用户分配的专属应用数据目录(如AppData/Roaming),该目录默认对当前用户开放完全读写权限,无需管理员权限。

具体实现步骤

1. 获取用户专属的应用数据路径

通过Python的os模块直接读取系统环境变量,获取用户的AppData/Roaming目录(这是Windows标准的用户应用数据存储位置)。

2. 创建应用专属的保存目录

在上述路径下创建你的游戏专属文件夹(比如MyGame/Saves),确保目录不存在时自动创建,避免因目录缺失导致的写入错误。

修改后的完整代码

import pygame
from pygame.locals import *
import os

pygame.init()
app = pygame.display.set_mode((640, 480), RESIZABLE)

def get_save_directory():
    # 获取Windows用户的AppData/Roaming目录
    appdata_path = os.environ.get('APPDATA')
    # 拼接出你的应用专属保存目录
    save_dir = os.path.join(appdata_path, "MyGame", "Saves")
    # 目录不存在则递归创建
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    return save_dir

def saveFile(contents):
    save_dir = get_save_directory()
    save_file_path = os.path.join(save_dir, "default.sav")
    with open(save_file_path, "w") as f:
        f.write(contents)

run = True
while run:
    for ev in pygame.event.get():
        if ev.type == QUIT:
            saveFile("some_placeholder_data")
            pygame.quit()
            run = False

    if not run:
        break

补充说明

  • 为什么不能用安装目录?Program Files是系统级保护目录,Windows的UAC机制会限制普通用户写入,这是系统安全设计的一部分,强行要求管理员权限会降低用户体验。
  • 跨平台兼容(如果需要):如果要支持Linux/macOS,可以用os.path.expanduser("~")获取用户主目录,再创建隐藏文件夹(如.MyGame/Saves)存储数据;或者使用appdirs库统一处理各平台的标准路径。
  • InstallForge无需额外配置:安装程序只需将exe、Assets等只读资源放到Program Files目录即可,保存路径的逻辑已经通过代码转移到用户有权限的目录。

内容的提问来源于stack exchange,提问作者Ruben Driezen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:18:10