2013-06-12 5 views
1

Windows7/8/Vista/XP에서 시스템 시작시 실행되는 python 앱을 작성했습니다. 처음 실행될 때 시스템에있는 특정 프로그램과 몇 가지 파일 형식/확장명을 연결해야합니다. 당분간 나는 이렇게 성취한다 :파일을 파이썬 프로그램에 연결

import win32com.shell.shell as shell 

def runAssoc(): 
    shell.ShellExecuteEx(
    lpVerb="runas", 
    lpFile='c:\\Users\\myUser\\assoc.bat') 

문제는 시작에서 실행했을 때 가끔 작동하지 않는 경우입니다. 내가 hereShellExecuteEx 그 오류가 호출 프로세스에 출력되지 않습니다, 그래서 그 끝에 느슨한 볼 수 없으며 주어진 기사를 읽어 therelpVerb="runas" 일반적으로 나쁜 연습으로 간주됩니다 읽었습니다.

내 assoc.bat는 다음과 같은 방법으로 기록 된대로 관리자의 승인이 필요합니다. (Windows)와 함께 제공된 나는 마이크로 소프트의 메모장을 연결하고있어 여기에

assoc .txt=myNotepad 
assoc .hello=myNotepad 
ftype myNotepad="C:\Windows\system32\notepad.exe" "%%1" 

을 (의 그 "TXT"와 "안녕하세요"확장에 물론 이해가 안되지만 좋은 예입니다.)

나는 Windows가 프로그램에 파일 확장명을 연결할 수있는 명령 줄 도구를 제공하지 않는다는 것을 이해합니다. 현재 사용자는입니다. 나는 성취하려고 노력하고있다.)
On this articleassoc은 관리자 권한없이 쓸 수있는 HKEY_CURRENT_USER 대신 Windows 설치의 모든 사용자 계정에서 사용하는 레지스트리 영역에 영향을줍니다.

나는 sys.argv[-1] != "asadmin"을 확인하라는 답변이 here이지만, sys.argv은 앱을 실행할 때마다 빈 배열로 보인다.

1) ShellExecuteEx이 실행되고 필요한 경우 관리자 권한을 요구할 수 있습니까?

2)이 확장을 현재 사용자에게만 연결하는 배치 파일을 만드는 방법이 있습니까? 사실, 오류의 원인 인 'runas'매개 변수를 사용할 필요가 없습니다.

작은 메모 : 실제적으로 나는이 배치 파일을 '프로그래밍 방식으로'즉석에서 빌드하지만 실제 문제와 관련이 없으므로 여기서는 설명하지 않습니다.

답변

1

아마도 가장 쉬운 일은 .reg 파일을 만들고 reg 파일에 직접 필요한 레지스트리 키를 쓸 수 있다는 것입니다. 예 :

Windows Registry Editor Version 5.00 

[HKEY_CURRENT_USER\Software\Classes\.hello] 
@="txtfile" 

분명히 myNotepad 유형을 만들 수도 있습니다. 당신은 ASSOC 다음 .reg 파일을 만들 을 regedit를을 사용할 수 있습니다 (선택 키와 RMB + 수출) 당신이 사용하는 경우 자동으로 등록을 설치 창을 알 수 있습니다 :

regedit -s your_reistration_file.reg 

을 이제와 위의 라인을 호출 할 수 있습니다 ShellExecuteEx. uer에는 reg 파일로 레지스트리를 편집 할 수있는 권한이 없을 수 있습니다.

할 수 있습니다 직접, 여기에 위의 추가 정보를 원하시면 winreg를 위해 문서를 참조하는 예입니다 파이썬에서 편집 레지스트리 :

import _winreg #just winreg in Python 3 

key = _winreg.OpenKey(
    _winreg.HKEY_CURRENT_USER, 
    r"Software\Classes" 
    ) 

hello = _winreg.CreateKeyEx(key, ".hello") 
_winreg.SetValue(hello, '', _winreg.REG_SZ, 'txtfile') 
+0

큰 물건. 나는 그것을 조금 테스트하고 그것이 어떻게 진행되는지 업데이트 할 것이다. – user1555863

관련 문제