[Python-Dev] Re: [Python-checkins] python/nondist/sandbox/msi msilib.py, 1.2, 1.3 (original) (raw)

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.HKEYLOCALMACHINE, 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