InnoSetup打包后可执行文件出现‘Failed to execute script’错误排查
问题分析与解决方案
首先,这个「Failed to execute script」错误大概率是权限不足导致的,结合你的场景,具体原因和解决办法如下:
核心原因
当你通过Inno Setup将程序安装到默认的{autopf}\{#MyAppName}目录(通常是C:\Program Files\testApp)时,这个目录属于系统级保护目录,普通用户没有直接写入文件的权限。而你的Python脚本尝试在exe所在目录创建test.txt,这就触发了系统的权限限制,导致脚本执行失败。
直接运行exe时没问题,是因为你运行的是桌面dist目录里的文件,这个路径属于用户完全可控的范围,所以写入操作能正常完成。
另外你的Inno Setup脚本里AppId定义少了一个闭合的},应该改成AppId={{3D8E37F3-FB32-4AF9-8C64-58C37D542248}},虽然这不是当前报错的直接原因,但会影响安装程序的唯一标识,建议修正。
解决方案
你可以从以下几个方向解决问题:
1. 修改Python脚本,将文件写入用户可写目录
不要在程序安装目录创建文件,而是写到用户专属的可写路径,比如「我的文档」或「AppData」目录。修改后的脚本示例:
import os, sys test_str = "test" # 写入到用户文档目录 user_doc_dir = os.path.expanduser("~/Documents") path_w = os.path.join(user_doc_dir, 'test.txt') with open(path_w, mode='w') as f: f.write(test_str)
如果想把文件放到程序专属的用户目录,也可以用AppData路径:
import os, sys test_str = "test" # 获取用户AppData目录并创建程序专属文件夹 user_appdata_dir = os.getenv('APPDATA') app_dir = os.path.join(user_appdata_dir, 'testApp') os.makedirs(app_dir, exist_ok=True) path_w = os.path.join(app_dir, 'test.txt') with open(path_w, mode='w') as f: f.write(test_str)
2. 修改Inno Setup配置,让程序安装到用户可写目录
把DefaultDirName改成用户专属路径,比如:
DefaultDirName={userdocs}\{#MyAppName}
或者:
DefaultDirName={userappdata}\{#MyAppName}
这样安装后的目录就属于用户完全可控的范围,脚本就能正常创建文件了。
3. 给安装目录添加写入权限(不推荐)
这种方式会带来安全风险,不建议采用,但如果一定要尝试,可以在Inno Setup脚本中添加[Dirs]段:
[Dirs] Name: "{app}"; Permissions: users-full
内容的提问来源于stack exchange,提问作者taichi
相关产品推荐
相关产品推荐

