<p>安装后脚本将在本机Windows安装例程中运行。在</p>
<p>函数<code>get_special_folder_path</code>、<code>directory_created</code>、<code>directory_created</code>和<code>create_shortcut</code>不是python函数:例如,它们不能作为关键字-参数对调用-只能按位置调用。函数定义在<a href="https://github.com/python/cpython/blob/master/PC/bdist_wininst/install.c" rel="nofollow noreferrer">https://github.com/python/cpython/blob/master/PC/bdist_wininst/install.c</a></p>
<p>shorcut创建的例程充当系统接口<a href="https://msdn.microsoft.com/en-us/library/windows/desktop/bb774950(v=vs.85).aspx" rel="nofollow noreferrer">^{<cd5>}</a>(shell32.dll中的“lives”)的包装器,从第504行开始:</p>
<pre><code>static PyObject *CreateShortcut(PyObject *self, PyObject *args)
{...
</code></pre>
<p>然后在第643行链接:</p>
^{pr2}$
<p>在本地安装中,上述C代码已在可执行文件中编译:</p>
<pre><code>C:\Python26\Lib\distutils\command\wininst-6.0.exe
C:\Python26\Lib\distutils\command\wininst-7.1.exe
C:\Python26\Lib\distutils\command\wininst-8.0.exe
C:\Python26\Lib\distutils\command\wininst-9.0.exe
C:\Python26\Lib\distutils\command\wininst-9.0-amd64.exe
</code></pre>
<p>所以,回答:没有python库来导入函数create_shortcut(),它只在Windows安装后脚本中可用。在</p>
<p>如果要同时支持自动和手动安装后方案,请查看pywin32解决方案:</p>
<p><a href="https://github.com/mhammond/pywin32/blob/master/pywin32_postinstall.py" rel="nofollow noreferrer">https://github.com/mhammond/pywin32/blob/master/pywin32_postinstall.py</a>第80行</p>
<pre><code>try:
create_shortcut
except NameError:
# Create a function with the same signature as create_shortcut provided
# by bdist_wininst
def create_shortcut(path, description, filename,
arguments="", workdir="", iconpath="", iconindex=0):
import pythoncom
from win32com.shell import shell, shellcon
ilink = pythoncom.CoCreateInstance(shell.CLSID_ShellLink, None,
pythoncom.CLSCTX_INPROC_SERVER,
shell.IID_IShellLink)
ilink.SetPath(path)
ilink.SetDescription(description)
if arguments:
ilink.SetArguments(arguments)
if workdir:
ilink.SetWorkingDirectory(workdir)
if iconpath or iconindex:
ilink.SetIconLocation(iconpath, iconindex)
# now save it.
ipf = ilink.QueryInterface(pythoncom.IID_IPersistFile)
ipf.Save(filename, 0)
</code></pre>