2012-04-12 1 views
1

Я хотел бы найти 3d studio max, используя реестр Windows, используя python. Я также не привязан к конкретной версии.Как определить местоположение 3d studio max с помощью реестра с помощью python?

Я видел несколько примеров с использованием _winreg, но пока я вижу желаемый ключ в regedit, я не могу получить к нему доступ через python.

Ключ, который я хочу, это HKEY_LOCAL_MACHINE \ SOFTWARE \ Autodesk \ 3dsMax \ 14.0 \ MAX-1: 409 со значением Installdir.

Ниже приведен скрипт python, который я пытаюсь использовать.

from _winreg import * 
t = OpenKey(HKEY_LOCAL_MACHINE, r"SOFTWARE\Autodesk\3dsMax\14.0\Max-1:409", 0, KEY_READ) 

#try: 
i = 0 
while True: 
    subkey = EnumKey(t, i) 
    print subkey 
    i += 1 

Ошибка, которую я возвращаю, заключается в следующем.

Traceback (most recent call last): 
File "C:\testreg.py", line 2, in <module> 
t = OpenKey(HKEY_LOCAL_MACHINE, r"SOFTWARE\Autodesk\3dsMax\14.0\Max-1:409", 0, KEY_READ) 
WindowsError: [Error 2] The system cannot find the file specified 

System Info:

Windows 7 Professional 64 бит

Испытано с Python 2.5, 2.6 и 2.7 (32-разрядные версии каждого)

+0

вам нужно либо использовать необработанную строку, либо использовать обратную косую черту, но не обе. –

+0

Обновлено и восстановлено. – JonnyRo

ответ

1

Если вы обнаруживаете 64-битную версию 3dsmax, вам будет трудно найти ее с 32-битными процессами. 32-битные процессы на 64-битной «convienently» имеют замену реестра.

, если вы хотите:

hklm\SOFTWARE\autodesk\ 

вы фактически смотрите:

hklm\SOFTWARE\Wow6432Node\autodesk\ 

Поскольку 32-битные приложения существовали до 64-бит (на окнах) есть много этих прокладок, которые перенаправляют в реестре и так что 32-разрядные программы получают свои ключи и dll, не требуя, чтобы 64-битные программы называли все иначе (например, c: \ windows \ system64, HKML \ SOFTWARE64 \).

Я думаю, что всегда проще использовать 64-битные процессы для доступа к 32-битным, а не наоборот. Но если это невозможно, этот вопрос может помочь вам получить доступ к 64-битовому улью. Change 64bit Registry from 32bit Python

1

избавиться от двойных обратных косых черт, если вам 're using raw strings (как указано синтаксисом r'foo, который вы используете.)