我正在编写一个脚本来在计算机启动时执行一些本地文件管理任务。作为常规操作的一部分,它偶尔会在与运行文件夹相同的文件夹中创建一些临时文件。
为了尽可能简化这一点,我使用--onefile和--noconsole参数使用Pyinstaller编译脚本,并将已编译的.exe文件的路径添加到注册表中HKEY_CURRENT_USER \ SOFTWARE \ Microsoft下\的Windows \ CurrentVersion \ Run中。该脚本在开发环境中正常工作,或者如果手动启动。但是,如果它通过启动计算机(通过reg键)启动,则无法在正确的位置创建它应该创建的文件。经过一些测试,我得出结论,文件路径会根据文件的运行方式而改变:
如果手动启动(例如,双击.exe文件或运行.py脚本):
print(os.path.dirname(os.path.realpath(__file__)))
正确生成文件夹:
C:\Projects\Test
但是如果脚本在启动时开始运行,则同一行会产生不同的位置:
C:\Windows\system32
这会导致文件操作在system32文件夹中进行,这不应该发生。
这种行为有什么解释吗?由于上述相同的原因,脚本执行文件操作(例如,重新启动脚本本身)的批处理文件如果使用相对路径而不是绝对路径也会失败。除了硬编码绝对文件路径以外,如何解决这个问题呢?