Only a MSI package packing everything in

  • Thread starter Thread starter Viviana Vc
  • Start date Start date
V

Viviana Vc

Hi all,

One way of building the release is having just a msi file without
anything else, no CABs, no setup.exe, no external files.

I know that the MSI file contains all the tables that reflect the
inteligence of that specific installer, but I wasn't sure that also the
application files can be packed into the MSI.

1) As everything in a MSI are tables which table contains the content of
those files? Or how are those files stored in the MSI?

2) As discussed in another thread the MSI files (without the CABs) are
cached in the WindowSystem\Installer folder. In this case, when there is
a MSI file containing everything packed in, is cached the whole MSI
meaning also the files that are part of the package?

3) Also in case I want to replace a file from a MSI package how could I
do that with Orca?

4) What kind of release version would system administrators preffer:
CD-ROM, Network compressed, uncompressed, etc?

Thx,
Viv
 
An msi file is a COM structured store. In addition to the msi database you
can also embed the CAB with your application files in that storage. However
they don't end up in MSI database tables, but in a separate stream in the
storage file.
those embedded CABs are stripped from the msi file for caching in the
installer cache. So in the cache there's only the msi database, no
application files.

--
Stefan Krueger
Microsoft Windows Installer MVP

Please post your questions in the newsgroup or vist one of these web sites:

Windows Installer FAQ
http://www.msifaq.com - http://www.msifaq.de

InstallSite - Resources for Setup Developers
http://www.installsite.org
http://www.installsite.de (GERMAN)
 
Hi Stefan,

Can I touch those inside CABs/files with Orca or this is not possible?

Thx,
Viv
 
If the CAB stream is referenced in the Cabs table, Orca will let you save it
to a file, or replace it with another file -- just double-click on the
[Binary Data] tag. You can then use the MS cab tools or WinRAR to access
the CAB contents; I've done this a few times in the past with both 2.x and
3.x versions of Orca.

You can do the double-click thing with the Binary and Icon tables, too.
 
The Cabs table? Can you send me a screenshot, I must be missing something.
Will WinRAR leave the file sequence intact?

--
Stefan Krueger
Microsoft Windows Installer MVP

Please post your questions in the newsgroup or vist one of these web sites:

Windows Installer FAQ
http://www.msifaq.com - http://www.msifaq.de

InstallSite - Resources for Setup Developers
http://www.installsite.org
http://www.installsite.de (GERMAN)

Jeff Henkels said:
If the CAB stream is referenced in the Cabs table, Orca will let you save
it to a file, or replace it with another file -- just double-click on the
[Binary Data] tag. You can then use the MS cab tools or WinRAR to access
the CAB contents; I've done this a few times in the past with both 2.x and
3.x versions of Orca.

You can do the double-click thing with the Binary and Icon tables, too.

Stefan Krueger said:
No, Orca only accesses the msi databse, not the CAB streams in the
storage file.

--
Stefan Krueger
Microsoft Windows Installer MVP

Please post your questions in the newsgroup or vist one of these web
sites:

Windows Installer FAQ
http://www.msifaq.com - http://www.msifaq.de

InstallSite - Resources for Setup Developers
http://www.installsite.org
http://www.installsite.de (GERMAN)
 
I opened the MSI file generated with InstallShield but I don't have any
Cab table. So basically I can't do what Jeff suggested. Maybe is not
possible with MSI files generated by IS?

But nevertheless thanks Jeff for explaining the trick as I could do it
with Binary and Icon table indeed.

Thx,
Viv
 
CABs are listed in the
Media table -> Cabinet column

Stored in the
_Streams table -> Data column

Extracted through the
Record -> ReadStream method

--
(e-mail address removed)
I opened the MSI file generated with InstallShield but I don't have any
Cab table. So basically I can't do what Jeff suggested. Maybe is not
possible with MSI files generated by IS?

But nevertheless thanks Jeff for explaining the trick as I could do it
with Binary and Icon table indeed.

Thx,
Viv

 
Sorry, I'm not really familiar with Orca. Apparently
the _Streams table is really more a concept rather
than a real table. From the MSI.CHM file:

"The _Streams table lists embedded OLE data streams. This is a temporary
table, created only when referenced by a SQL statement."

It sounds like Orca doesn't provide that for you.
Here's more explanation from the help:

-------------------------------------------------
To copy an OLE data stream (for example, an object of the Binary data type)
from a file into a database, create a record in the _Streams table and enter
the name of the data stream into the Name column of this record and copy the
data from the file into the Data column using MsiRecordSetStream. Use
MsiViewModify to insert the new record into the table.

To read a binary data stream embedded in a database, use a SQL query to find
and to fetch the record containing the binary data. Use MsiRecordReadStream
to read the binary data into a buffer.
------------------------------------------------

If you're interested, the following link is a VBScript
package that fully unpacks and documents an MSI
file, including the embedded cab(s). But there's no
code sample in it for writing the cab *into* the database.
(As detailed above in the help snippet.) You'd have to
write that yourself.
It may not be worth the trouble to you, but MSI does
have a full COM interface that provides the ability do
pretty much whatever you want to do with script or
COM-aware programming languages. I've seen at least
one script-based MSI package maker before. And you
could write your own "Orca" to suit your needs if you
wanted to.

MSI package:
http://www.jsware.net/jsware/scripts.phi#msiprog
 
To extract a stream from the MSI, you can use MSIDB.exe which is included in
the platform SDK (Windows Installer SDK). This will extract the Data1.cab
stream to your C: drive.

msidb -d C:\test.msi -x Data1.cab -f C:\
 
Back
Top