以py2exe作为管理员问题运行

时间:2011-01-30 16:49:26

标签: python

我遇到这个问题,我们将python项目编译成带有py2exe的exe,并且除非以管理员身份执行,否则生成的exe不起作用。

我想问这是否应该发生?因为有很多应用程序,我们可以运行而不是管理员,所以有任何方法可以将我的python代码转换为这样的应用程序......

非常感谢..

2 个答案:

答案 0 :(得分:4)

听起来您的应用程序正在尝试写入基本用户无权访问的目录;很可能是“Program Files”目录。我相信Vista / Win7是不允许的,标准惯例是写入用户的appdata文件夹,以查找您可能希望存储的任何用户数据。

您可以使用ctypes模块可靠地获取此目录的位置,这是一个示例:

import ctypes
from ctypes import wintypes

def get_appdata_directory():
    CSIDL_APPDATA = 0x001a

    dll = ctypes.windll.shell32
    app_data_directory = ctypes.create_unicode_buffer(wintypes.MAX_PATH)

    found = dll.SHGetFolderPathW(0, CSIDL_APPDATA, 0, 0, app_data_directory)

    # FYI: if `found` is False, then it failed to locate the appdata directory
    # and app_data_directory.value is empty. So you might want to add some
    # code here to verify that a valid path is going to be returned.

    # This would probably only happen on older versions of windows, 
    # but, this is just a guess as I don't have any older OSs available
    # for testing. (see my note below)

    return app_data_directory.value

appdata = get_appdata_directory()
print(appdata)
# outputs something such as: 'C:\Users\bob\AppData'

注意:我相信WinXP / Win2k引入了appdata文件夹。不确定WinME和之前,但是,我不相信你必须担心这些早期操作系统的管理员限制。如果你真的想要支持它们,你可以使用python的内置platform模块和一些条件,然后只需将用户数据写入Windows的古老版本的“Program Files”目录。

答案 1 :(得分:0)

我遇到了让py2exe工作的严重问题。幸运的是,我发现了优秀的PyInstaller不仅可以工作,而且还可以创建更小的可执行文件。我没有遇到你用PyInstaller提到的问题所以我建议尝试一下。

http://www.pyinstaller.org/