2011-01-30 6 views
1

py2exe를 사용하여 python 프로젝트를 exe로 컴파일 한 결과 관리자가 실행하지 않으면 결과 exe가 작동하지 않는 문제가 있습니다.py2exe 관리자 문제로 실행

나는 이런 일이 일어날 것을 묻고 싶었다. 우리가 실행할 수 있도록 많은 응용 프로그램이 있습니다에서와 같이 관리자가 아닌 그래서 나는 이러한 응용 프로그램 내 파이썬 코드를 변환 할 수있는 방법 ... 내가 했어

+1

(비 exe) 소스가 작동합니까? 어떤 종류의 문제? – delnan

답변

4

소리가 난다; "Program Files"디렉토리 일 가능성이 높습니다. Vista/Win7은 허용되지 않으며 사용자가 저장하고자하는 사용자 데이터에 대해 사용자의 appdata 폴더에 쓰는 것이 표준 규칙입니다.

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' 

참고 :

당신은 안정적으로 ctypes 모듈을 사용하여이 디렉토리의 위치를 ​​얻을 수 있습니다, 여기에 예제가 나는 appdata 폴더가 WINXP/윈도우 2000에 도입 된 생각합니다. WinME와 이전 버전에 대해서는 잘 모르지만, 이전 운영체제에 대한 관리자의 제한 사항에 대해 걱정할 필요가 없습니다. 정말로 그들을 지원하기를 원한다면 파이썬의 내장 된 platform 모듈을 몇 가지 조건과 함께 사용할 수 있습니다. 그런 다음 구식 버전의 Windows 용 "Program Files"디렉토리에 사용자 데이터를 작성하면됩니다.

+0

'dll.SHGetFolderPathW()'는 * 정수 *를 반환합니다. '0'이면 'app_data_directory.value'에는 유용한 정보가 들어 있습니다. – jfs

0

덕분에 많은 ..이 py2exe를 작동시키는 데 심각한 문제가 있습니다. 다행히도 나는 작동 할뿐만 아니라 더 작은 실행 파일을 생성하는 우수한 PyInstaller를 발견했습니다. 나는 당신이 PyInstaller로 언급 한 문제에 부딪치지 않았으므로 그것을 시도하는 것이 좋습니다. 응용 프로그램이 기본 사용자가 액세스 할 수없는 위해 디렉토리에 쓰기를 시도처럼

http://www.pyinstaller.org/