Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用py2exe编译用于注册excel加载项的python脚本无效_Python_Registry_Py2exe_Win32com_Excel Addins - Fatal编程技术网

使用py2exe编译用于注册excel加载项的python脚本无效

使用py2exe编译用于注册excel加载项的python脚本无效,python,registry,py2exe,win32com,excel-addins,Python,Registry,Py2exe,Win32com,Excel Addins,我的目标是制作一种安装程序,以便注册用Python编写的Office插件。因此,我从Python文件夹(Python27\Lib\site packages\win32com\demos\excelAddin.py)中的演示开始。脚本工作,按钮和消息框出现。然后我使用py2exe来部署它,并创建一个执行相同操作的可执行文件。但这样它就不起作用了,我的意思是:在我运行exe之后,按钮不会出现在Excel栏中。经过一些研究,我发现在如何将注册表项注册到Windows注册表上存在一些差异。可执行文件不

我的目标是制作一种安装程序,以便注册用Python编写的Office插件。因此,我从Python文件夹(Python27\Lib\site packages\win32com\demos\excelAddin.py)中的演示开始。脚本工作,按钮和消息框出现。然后我使用py2exe来部署它,并创建一个执行相同操作的可执行文件。但这样它就不起作用了,我的意思是:在我运行exe之后,按钮不会出现在Excel栏中。经过一些研究,我发现在如何将注册表项注册到Windows注册表上存在一些差异。可执行文件不注册以下项:

xxxxx是应用程序的CLSID

HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ - 
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ - 
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ - 
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ - 
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ - 
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ - 
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\
事实上,当我直接运行excelAddin.py脚本时,我得到以下结果:

HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\ --> (Standard) - REG_SZ - Python.Test.Addin
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\Debugging\ --> (Standard) - REG_SZ - 0
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ - 
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ - 
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\ProgID\ --> (Standard) - REG_SZ - Python.Test.ExcelAddin
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\PythonCOM\ --> (Standard) - REG_SZ - excelAddin.ExcelAddin
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\PythonCOMPolicy\ --> (Standard) - REG_SZ - win32com.server.policy.EventHandlerPolicy

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\ --> (Standard) - REG_SZ - Python.Test.Addin
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\Debugging\ --> (Standard) - REG_SZ - 0
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ - 
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ - 
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\ProgID\ --> (Standard) - REG_SZ - Python.Test.ExcelAddin
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\PythonCOM\ --> (Standard) - REG_SZ - excelAddin.ExcelAddin
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\PythonCOMPolicy\ --> (Standard) - REG_SZ - win32com.server.policy.EventHandlerPolicy

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\ --> (Standard) - REG_SZ - Python.Test.Addin
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\Debugging\ --> (Standard) - REG_SZ - 0
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ - 
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ - 
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\ProgID\ --> (Standard) - REG_SZ - Python.Test.ExcelAddin
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\PythonCOM\ --> (Standard) - REG_SZ - excelAddin.ExcelAddin
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\PythonCOMPolicy\ --> (Standard) - REG_SZ - win32com.server.policy.EventHandlerPolicy
还有其他几个键我没有在这里显示,因为它们正确匹配。我想问题在于,从可执行文件中无法注册脚本,或者可能无法注册编译后的脚本“.pyc”。但是,即使我知道这个事实,我也不知道如何解决这个问题。还有其他人面临这种问题吗?多谢各位

其他资料:

  • Python 2.7.6 32位
  • Windows7专业版
  • 办公室2010
  • 链接到原始脚本
这是我写的setup.py。如果没有管理员权限,它根本不工作。我还尝试了使用选项“console=”而不是“windows=”但没有成功

from distutils.core import setup
import py2exe

setup(windows=[{
    'script': "excelAddin.py",
    'uac_info': "requireAdministrator",
},])

在安装程序中进行一些错误检查,并将其设置为py2exe
console=
应用程序,以便您可以轻松查看打印到stdout和stderr的任何错误消息。您是否尝试过使用诸如cx\u freeze之类的替代方法?@Temere谢谢,我尝试过cx\u freeze,我注意到它允许对管理员权限和库导入进行较少的操作,但这并不能解决上述问题problem@martineau谢谢,我做到了,我唯一能注意到的是win32com的register.py模块无法正确获取脚本路径(scriptDir和addnPath变量),因为在部署之后,实际上已经没有脚本了。不幸的是,我没有太多时间继续这样做,现在我正在用C#和VSTO做同样的事情。。。