[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