2011-01-11 90 views
4

我想從使用Python在Windows註冊表中刪除值,但我不明白什麼是Python文檔中的sub_key:刪除與Python一個Windows註冊表值

我有下面的代碼,這我想用:

def del_env(name): 
    key = OpenKey(HKEY_CURRENT_USER, 'Environment', 0, KEY_ALL_ACCESS) 
    #SetValueEx(key, name, 0, REG_EXPAND_SZ, value) 
    DeleteKey(key, ???) # what goes where the ??? are 
    CloseKey(key) 
    SendMessage(
     win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE, 0, 'Environment') 

這個功能應該作爲

del_env("SOMEKEY") 

PS我忘了提,如果我使用:

deleteKey(key,"") 

會議的所有環境變量被刪除...

由於提前, 奧茲

我的光榮失敗:

: C:\etc\venus\current\bin>python.bat 
Python 2.4.4 (#0, Jun 5 2008, 09:22:45) [MSC v.1310 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import _winreg 
>>> key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Environment") 
>>> _winreg.DeleteKey(key,"OZ") 
Traceback (most recent call last): 
File "<stdin>", line 1, in ? 
WindowsError: [Errno 2] Das System kann die angegebene Datei nicht finden 
+2

我想你應該使用`DeleteValue`來代替。 – Philipp 2011-01-11 14:01:08

+0

`???`應該是你想要刪除的環境變量的子鍵(這裏是環境變量的名字)。 – martineau 2011-01-11 14:52:17

回答

4

使用DeleteValue,而不是作爲DeleteKey在@Philipp評論中提到:

def del_env(name): 
    key = OpenKey(HKEY_CURRENT_USER, 'Environment', 0, KEY_ALL_ACCESS) 
    DeleteValue(key, name) 
    CloseKey(key) 
    SendMessage(
     win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE, 0, 'Environment') 
0

我覺得DELETEKEY需要家長到你想刪除的密鑰,而sub_key是你要刪除的密鑰。我不在Windows機器上,所以我現在無法測試它。

+0

你是什麼意思父母的關鍵? – Oz123 2011-01-11 13:01:02

-1

OK,

不是一個Python的解決方案,但它的工作原理:

C:\Documents and Settings\admin>reg add "%REGISTRY_KEY%\Environment" /v AME /t 
    REG_EXPAND_SZ /d "%AME%" /f 


    #REG DELETE KeyName [/v ValueName | /ve | /va] [/f] 

    C:\Documents and Settings\admin>reg delete "%REGISTRY_KEY%\Environment" /v AME 
    /f 

    Der Vorgang wurde erfolgreich ausgeführt. 

成功...