[Python-Dev] Re: [Python-checkins] python/nondist/sandbox/msi
msilib.py, 1.2, 1.3
Thomas Heller
theller at python.net
Wed Jan 7 03:36:44 EST 2004
"Martin v. Loewis" <martin at v.loewis.de> writes:
> Thomas Heller wrote:
>
>>>! for k, v in [(r"Software\Microsoft\VisualStudio\7.1\Setup\VS", "VS7CommonBinDir"),
>>>! (r"Software\Microsoft\Win32SDK\Directories", "Install Dir")]:
>>>! try:
>>>! key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, k)
>>>! except WindowsError:
>>>! continue
>>>! cabarc = os.path.join(_winreg.QueryValueEx(key, v)[0], r"Bin", "cabarc.exe")
>>>! _winreg.CloseKey(key)
>>>! assert os.path.exists(cabarc), cabarc
>> The above assert fails for me, there's no cabarc.exe in the
>> VS7CommonBinDir: Do I have to install additional software, apart from
>> VS.NET 2003?
>
> I don't think so. Where is cabarc.exe located, in your VS7.1
> installation tree? It should be in common/bin, which in turn
> should be listed in the first of the two registry keys.
Searching for cabarc.exe finds this:
c:\BC5\BIN\cabarc.exe
c:\cabsdk\BIN\CABARC.EXE
c:\Dokumente und Einstellungen\thomas\Desktop\downloads\Cabsdk\BIN\CABARC.EXE
c:\Programme\MicrosoftSDK\Bin\CabArc.Exe
c:\WINDOWS\Prefetch\CABARC.EXE-04C2A86A.pf
The first one in c:\bc5\bin is an old version, included in an old
borland compiler I have installed.
The one in c:\cabskd is from MS' cabinet sdk, also the one in downloads.
c:\Programme\MicrosoftSDK is the Feb 2003 Platform SDK, which I had
installed before installing VS 7.1.
So, it seems there is no cabsdk.exe in my VS 7.1 installation tree.
>
> Can you find out what is different in your installation?
> Also, what is the resulting cabarc variable in above assertion?
c:\sf\python\nondist\sandbox\msi>py24 msi.py
WARNING: Missing extension _bsddb.pyd
Traceback (most recent call last):
File "msi.py", line 753, in ?
add_files(db)
File "msi.py", line 627, in add_files
cab.commit(db)
File "c:\sf\python\nondist\sandbox\msi\msilib.py", line 367, in commit
assert os.path.exists(cabarc), cabarc
AssertionError: C:\Programme\Microsoft Visual Studio .NET 2003\Common7\Tools\Bin\cabarc.exe
> c:\sf\python\nondist\sandbox\msi\msilib.py(367)commit()
-> assert os.path.exists(cabarc), cabarc
(Pdb)
Ah, now I see. Changing the code to this:
for k, v in [(r"Software\Microsoft\VisualStudio\7.1\Setup\VS", "VS7CommonBinDir"),
(r"Software\Microsoft\Win32SDK\Directories", "Install Dir")]:
try:
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, k)
except WindowsError:
continue
cabarc = os.path.join(_winreg.QueryValueEx(key, v)[0], r"Bin", "cabarc.exe")
_winreg.CloseKey(key)
if not os.path.exists(cabarc):
continue
break
else:
print "WARNING: cabarc.exe not found in registry"
cabarc = "cabarc.exe"
makes it work, since it now finds the cabarc.exe in
c:\Programme\MicrosoftSDK.
Where is cabarc.exe on *your* system?
Thomas
More information about the Python-Dev
mailing list