因此,我編寫了一個在Windows7/8/Vista/XP系統啓動時運行的python應用程序。第一次運行時,我希望它將幾個文件類型/擴展與系統上的某個程序相關聯。暫時,我這樣做是這樣的:將文件關聯到python的程序
import win32com.shell.shell as shell
def runAssoc():
shell.ShellExecuteEx(
lpVerb="runas",
lpFile='c:\\Users\\myUser\\assoc.bat')
問題是,從啓動時運行,這有時無法工作。我讀here,ShellExecuteEx
不會輸出它的調用過程中的錯誤,所以我沒有看到有什麼鬆散的結尾,也閱讀therelpVerb="runas"
通常被認爲是不好的做法。
我assoc.bat需要,因爲它是寫了下面的方法管理員審覈:
assoc .txt=myNotepad
assoc .hello=myNotepad
ftype myNotepad="C:\Windows\system32\notepad.exe" "%%1"
(在這裏我關聯微軟的記事本與Windows爲「TXT」和「你好」擴展名的。當然是沒有意義的,但是是一個很好的例子。)
據我所知,Windows不提供一個命令行工具,使我們能夠爲當前用戶文件擴展名的程序關聯僅(這已經很不錯了我努力實現)。
On this article我讀assoc
會影響Windows安裝中每個用戶帳戶使用的註冊表區域,而不是可以在沒有管理員權限的情況下寫入的HKEY_CURRENT_USER
。
我讀了另一個回答here建議檢查sys.argv[-1] != "asadmin"
,但sys.argv
似乎是每次我的應用程序運行時一個空的數組。
1)我可以確保ShellExecuteEx
運行並在需要時提示輸入管理員權限嗎?
2)也許有一種方法,我可以創建一個批處理文件,將這些擴展名與當前用戶關聯嗎?比起來,我不需要使用被認爲是錯誤來源的'runas'參數。
有一點需要注意的是:實際上,我是在編程的時候生成這個批處理文件的,但這裏沒有討論它,因爲它並沒有真正涉及到這個問題。
偉大的東西。我會測試一下並更新它的方式。 – user1555863