我应该给我的应用程序写访问程序文件吗?
Should I give my app write access to Program Files?
我使用 Plotly 的 Dash 构建了一个独立的桌面应用程序。为了部署它,我使用 pyinstaller 创建一个可执行文件,并使用 Inno Setup 创建一个安装向导,供用户安装应用程序。当我使用 pyinstaller 创建可执行文件时,我没有使用一个文件选项,因为我有多个配置文件。
当 运行 使用 pyinstaller 可执行文件时,应用程序按预期运行。但是当我使用已安装的时,它不起作用。我的直觉说这是写权限问题 issue;我的应用程序为中间步骤创建了一些临时文件。我该如何处理? Windows 上是否有临时文件夹,我可以将文件保存到该应用程序不需要特殊写入权限的位置?我应该默认授予对我的程序的写入权限吗?
如@PanagiotisKanavos 在评论中所述,答案不是授予对程序文件的写入权限。正确的实现方式是使用 python.
的 tempfiles
模块
import tempfile
def functionA():
temp_file = tempfile.TemporaryFile()
temp_file.write("hello world")
contents = temp_file.read()
temp_file.close()
def functionB():
temp_file = tempfile.NamedTemporaryFile()
file_path = temp_file.name
temp_file.close()
请注意,tempfile 在关闭时会删除一个临时文件。如果您打算在 windows 平台上使用该文件,则必须先将其关闭,然后才能由另一个进程读取。为此,在实例化 TemporaryFile
对象时使用 delete=False
标志。请注意,您必须手动删除该文件。这很容易通过使用命名的临时文件并在完成后删除该路径中的文件来完成。
import tempfile
def functionC():
temp_file = tempfile.NamedTemporaryFile(delete=False)
temp_file.write("hello world")
temp_path = temp_file.name
temp_file.close()
os.system(f"echo {temp_path}")
os.remove(temp_path)
我使用 Plotly 的 Dash 构建了一个独立的桌面应用程序。为了部署它,我使用 pyinstaller 创建一个可执行文件,并使用 Inno Setup 创建一个安装向导,供用户安装应用程序。当我使用 pyinstaller 创建可执行文件时,我没有使用一个文件选项,因为我有多个配置文件。
当 运行 使用 pyinstaller 可执行文件时,应用程序按预期运行。但是当我使用已安装的时,它不起作用。我的直觉说这是写权限问题 issue;我的应用程序为中间步骤创建了一些临时文件。我该如何处理? Windows 上是否有临时文件夹,我可以将文件保存到该应用程序不需要特殊写入权限的位置?我应该默认授予对我的程序的写入权限吗?
如@PanagiotisKanavos 在评论中所述,答案不是授予对程序文件的写入权限。正确的实现方式是使用 python.
的tempfiles
模块
import tempfile
def functionA():
temp_file = tempfile.TemporaryFile()
temp_file.write("hello world")
contents = temp_file.read()
temp_file.close()
def functionB():
temp_file = tempfile.NamedTemporaryFile()
file_path = temp_file.name
temp_file.close()
请注意,tempfile 在关闭时会删除一个临时文件。如果您打算在 windows 平台上使用该文件,则必须先将其关闭,然后才能由另一个进程读取。为此,在实例化 TemporaryFile
对象时使用 delete=False
标志。请注意,您必须手动删除该文件。这很容易通过使用命名的临时文件并在完成后删除该路径中的文件来完成。
import tempfile
def functionC():
temp_file = tempfile.NamedTemporaryFile(delete=False)
temp_file.write("hello world")
temp_path = temp_file.name
temp_file.close()
os.system(f"echo {temp_path}")
os.remove(temp_path)