我正在研究处理SQLite3数据库的Python程序。我使用cx_Freeze将其作为MSI设置文件。
由cx_Freeze生成的.msi设置文件生成的Windows快捷方式不提供快捷方式的工作目录属性。因此,当我使用桌面上创建的快捷方式运行可执行文件时,它会在桌面上创建数据库文件。
可以通过为快捷方式提供不同的工作目录来更改此设置。我该怎么做?
答案 0 :(得分:7)
我能够通过对cx_Freeze / windist.py进行一些小改动来解决问题。在add_config(),第61行,我改变了:
msilib.add_data(self.db, "Shortcut",
[("S_APP_%s" % index, executable.shortcutDir,
executable.shortcutName, "TARGETDIR",
"[TARGETDIR]%s" % baseName, None, None, None,
None, None, None, None)])
到
msilib.add_data(self.db, "Shortcut",
[("S_APP_%s" % index, executable.shortcutDir,
executable.shortcutName, "TARGETDIR",
"[TARGETDIR]%s" % baseName, None, None, None,
None, None, None, "TARGETDIR")]) # <--- Working directory.
谢谢大家。
答案 1 :(得分:2)
在the answer to another question中找到了解决方案。 本质上,需要设置快捷方式表数据。下面 shortcut_table 中的最后一个'TARGETDIR'将工作目录设置为安装目录。
---从上述答案中复制---
from cx_Freeze import *
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa371847(v=vs.85).aspx
shortcut_table = [
("DesktopShortcut", # Shortcut
"DesktopFolder", # Directory_
"DTI Playlist", # Name
"TARGETDIR", # Component_
"[TARGETDIR]playlist.exe",# Target
None, # Arguments
None, # Description
None, # Hotkey
None, # Icon
None, # IconIndex
None, # ShowCmd
'TARGETDIR' # WkDir
)
]
# Now create the table dictionary
msi_data = {"Shortcut": shortcut_table}
# Change some default MSI options and specify the use of the above defined tables
bdist_msi_options = {'data': msi_data}
setup(
options = {
"bdist_msi": bdist_msi_options,
},
executables = [
Executable(
"MyApp.py",
)
]
)