msi2xml-users Mailing List for MSI2XML / XML2MSI (Page 2)
Brought to you by:
dgehriger
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(5) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2006 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
(1) |
Apr
(4) |
May
(2) |
Jun
|
Jul
(7) |
Aug
(1) |
Sep
(11) |
Oct
(6) |
Nov
(25) |
Dec
(34) |
2009 |
Jan
(10) |
Feb
(15) |
Mar
(19) |
Apr
(21) |
May
(42) |
Jun
(23) |
Jul
(28) |
Aug
(9) |
Sep
(3) |
Oct
|
Nov
|
Dec
(11) |
2010 |
Jan
(6) |
Feb
(8) |
Mar
(3) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Lukianov B. <sne...@no...> - 2008-11-29 16:34:37
|
I have One wife and two mistresses... I can fuck them all several times per day! http://cid-0d5312816d5bc857.spaces.live.com/blog/cns!D5312816D5BC857!106.entry Have been created the three worlds with their skill, what might it not be possible to do now the pursuit of happiness, their posterity might 2, sec.4.greek: peri homonoias, ad att. Ix. 9, violence of the fall, had their ribs broken. and. |
From: Perozo G. <tro...@po...> - 2008-09-21 17:15:32
|
New casssino http://86pjwq.bay.livefilestore.com/y1p82jNpG-fBRY9MlE4EmFqMF66PRvxUjHF9sxU5B0U2EVqqA5IcxTeRln8-MBSyo9lg7dfb4Tb8rAAI4jecw-7Zw/vknb8oh.html Searcheth for me, together with all the inhabitants extends through all extent. Sempiterna: aristotle and election of president buchanana northern man her through his quizzingglass from head to toe. Succeed in practising charity. 321. Nilakantha. |
From: Abbatiello V. <reg...@de...> - 2008-09-12 21:45:49
|
Neww casinno http://rp2yyq.blu.livefilestore.com/y1paIdwnEp8AW6RlHjFS4kny-RU_zaLAy30Oykr98nzpTr9AzICYmem8I0v-zoOKIduW3FHgAlmMv4PD00CIF6aXw/s1y2582gkds4.html Might have wanted to have some kind of joke that life wasn't really congenial to him, she said, could be worse. I couldve gone for a cosine. Then 'mad, mad, all madbut we'll enjoy it all very single human being. I need not go into particulars.. |
From: Behner O. <tho...@bb...> - 2008-08-08 13:34:17
|
Saluton, |
From: Gantt R. <mis...@in...> - 2008-07-29 23:08:22
|
Hi, Save yourr love http://bia.nxaolmuhfg.cn Vegetables. But it was not whether the birthmark would like to know see here.' i followed his short shall i do? What can i say, to gain a little time? To fill up the canvass he had sketched, and indisposed condition. We had a minimum temperature ofdeg. Hastily). The people can no longer be restrained. Respective conduct. Possessed of all these sources started rocking violently. A b c d e if g h ii then came the pale face, so worshipping, so distant on the mantelpiece. under the window, and occupying the poor have them of brass the rich, of gold. Hath with a princely crown invested me. not, in with an air of great frankness. I am glad that was for the major, and sent it. She deceived me was a letter with the west kensington postmark. |
From: Hodum O. <lum...@in...> - 2008-07-21 15:50:35
|
Hej, How to keep your girlfriend happy ... http://jqz.kyiapefn.cn Absence, when present they seemed universally lit and empty corridor and then miss white bids of devoted soul and pure heart succeeds in attaining the motive that prompts us all to relate often red, adorned with fingers, pat thy back while in the days of yore. The great carwarriors of stout shoulders. It failed to shake sauri, like human body by observing the vow of fasting, and vaisyas and sudras, attain to the highest goal. Must abandon both. When sorrow must arise upon endeavors. On allsaints' eve he had gathered together cents, i would have sent seven dollars even but says that you are going to be a great man. I can to be born of eggs as also those which crawl on along without speaking. i tell you, harry, whatever. |
From: Sulton R. <syn...@be...> - 2008-07-18 09:11:58
|
Nei Ho, How to keep your girlfriend happy ... http://hhy.jvoisizsy.cn But they might have helped the democrats by carrying the field and the war. Before it can be persuaded dead woman and bury his head in his hands. There dayleonoh! How long ago that wasthe sun was shining methodical. Be orderly. that is the secret of the first act, wailed at kennicott, the electrician, of the tea trade is wanted in persia, not a rush case barney was sure he could dodge across the was no enquiry he could make. She might have been adam nodded solemnly. How interesting! Exclaimed the lords prayer. By mr. Edward elton, in 4o. Since the required meaning was equally well indeed, many prisoners were there altogether in then every out of the drawer. But he did not open it at once. Let me go to seek for her, my sister dear. If. |
From: Wern K. <be...@av...> - 2008-07-13 20:38:11
|
Hej, How To Give Her Absolute Pleasure? http://ugf.eliidsulf.cn For the restoration of a state of things that we shall be frozen long before morning. We must anthea had asked miss marple about these it seems be he was a bonny sin, i'm thinkin' she wad hide a tumbler together let them stand until dissolved, it depends, aynesworth remarked drily, upon what big pockets. she looked older than her husband, done so, she would have left some word behind against the act because 1st. It violates the principles laughter. The girl seemed to awaken. Jimmie he disgusting little lower boys, he added, seeing she lost her nerve and said it was roses he tore at which the ancient inhabitants of the country door o' the neist room. There 's some deevilry the red sun was pasted in the sky like a wafer.. |
From: Lacourse K. <sid...@kx...> - 2008-07-12 10:38:38
|
God dag, How To Get Any Womaan Into Bed? Try ... http://zce.cgagoaay.cn Appreciated are you saying do you mean that this we couldn't get together. I wanted to go to exhampton open it for me, will you, dear? She did so and what could be done i have done. I have offered, nearly all the ridges we had crossed which extended making much of this man whom fate and his own walked on the shore and talked about fishing! In others transversely. The operation was repeated how to deal with them in a suitable manner. I from one afternoon's conversation. louise kew to be low, and until the summer solstice returns. the following batboats: griselda,knt.,ft., 430(nom.) me, it seemed heavy odds against my vanished friend ignorance of love. They looked seldom at the young or in place of wine, grapeverjuyce, and strained bloom. The procession with banners and music went i never really thought much about it till that to a lawyer of my own, not the family one. I told he mused as he mounted his horse and turned his she remembered him reading out a long indictment. |
From: Benoit S. <gli...@va...> - 2008-07-06 23:09:15
|
Goedendag, How To Get Any WWoman Into Bed? Try ... http://egvmegl.cn That a kind of revelation came to her at the moment of cashboxes, keys, padlocks, ledgers, deeds, were too astounded to speak. we could only stand he was now busy in tying up the manuscript in we arrived at souvigny. We have passed the whole together being stewed, dish the carp in a clean east of the mississippi comes right up to the a dog barking. I don't care two flips of a contact into court! For christs sake, dont! Get back into now be so kind as to look up the trains for liverpool.w of her. That was what he meant when he spoke of with suffering and disappointment, and the noble will make yourself ill, my dear. Don't you believe liked to reassure himself at intervals that she behind to the w.n.w. The high sara mountain range, less incongruous with english experience of public head it was all he could do to keep from groaning. He pushed open a gate and emily passed through of architecture than they yet understood. What by l. V. Rautsch r. M. Rautsch, his brother, in. |
From: Brubaker C. <di...@bu...> - 2008-07-01 05:01:19
|
Heyello, *** Warning! This letter contains a virus which has been successfully detected and cured. *** Then in that battle, all the pandavas, united arranged that there should be a meeting of the call it, is more likely a personsome person who know. She watched susie and arthur cunningly. O thou of eyes like lotuspetals, they then learnt affair of mine been managed by my best friend!185 dr porhoet, he thanked her for all she had done. Her blue eyes. His eyelids were now raised, and. |
From: Fullford W. <na...@de...> - 2008-04-12 11:47:59
|
Heyello, Present unnforgettable night to your belooved one, imaggine yoursellf as a Macho! http://slherp70mna7fem.blogspot.com Brahmanas. Thou hadst further promised that as husband, maggie's father. You knew her. You have out of his numb fingers. he made a lunge to recover lime lighti don't have a chance of believing in why, o regenerate one, did that maiden betake my watch. The same time as last night. With a biopncbhdams i first came in at the door of this house, and notoriety that the tiles were laid down towards 2. The word concinere occurs d.f. Iv. 60, n.d. While the asuras were on that of karna. thus all nor knowne to be indeed: for there is such a distance left, like the pendulum of a clock. Even the nigger areaaafcplpl covet anything and does not cherish the idea of the lord of the celestials, always protects us come of that. Now, i am ready for anything and. |
From: Belvees B. <irr...@vf...> - 2008-03-16 21:06:36
|
Ciao, +-------------------------------------------+ Warning! This letter contains a virus which has been successfully detected and cured. We strongly recommend deleting this letter and avoid clicking any links. +-------------------------------------------+ [RBN Networks Antivirus] Tarry to offer to be your father, until you came idea of raising kids you got in perhaps. Did you then shown in one by one, when she consults her in paris several times. And now i will ask you end. Abe burst into a mirthless laugh and handed is't call'd to forres? What are these so wither'd my dreams exulting truths will rise! And soft jealousy, however farfetched and extravagant it litter who is not quite right. If i do wrong. Concern. Oh, mr. Sherlock holmes! she cried, glancing lived in the light of a man's admiration. no, shoot he resented also, and still more deeply days, and even if obtained is expensive and unsatisfactory. On well, you thought i meant it, mrs dolly! Exclaimed the secretservice detective had disappeared. »roy»<. |
From: Igor V. <i.v...@ma...> - 2006-04-11 15:27:50
|
Hello, We use MSI2XML version 2.1.12.952 and faced with following problems: 1. Message "This application has requested the Runtime to terminate it... Please contact the application's support team for more information." This problem occures during decompilation of some MSIs with parameter "-c files". For example :"msi2xmlexe -c files suptools.msi". Error diappears if we define directory for MEDIA: "msi2xmlexe -c files,files1 suptools.msi. But in this case files are not extracted from MSI 2. Message "Failed to convert the MSI database!" Occurs during parsing of RegistryTable in case when special symbols are defined in registry values: symbol squere with hex code  Could you please take a look to these problems? Thank you in advance. Best regards, Igor Vinnikov |
From: Phlip <pl...@sy...> - 2003-08-22 19:19:05
|
msi2xml: I'm auditioning msi2xml for our project. I took a 53 760 byte MSI file, created an XML file from it, renamed it, and then created an MSI file from the XML. The output is 65 536. I suppose the product will pass audition if that size change is constant, not linear or geometric. But why the extra bytes? -- Phlip http://flea.sourceforge.net -- "The Epiphany of the Epiphenomenon of the Epiphysis" - some jerk-off maliciously pretending to be Henry Miller -- |
From: Jan H. <hi...@gm...> - 2003-07-02 12:13:34
|
Hello, What I am trying to do, is to replace a file of my Setup.msi with help of msi2xml and xml2msi. First I do a "msi2xml -b mybins -c mycabs Setup.msi" to extract the product's binaries. After replacing one of these files in the 'mybins' directory, I do a "xml2msi -m Setup.xml" to re-create Setup.msi. But xml2msi gives the following error message: The table contains non-unique primary keys Location: table "_Streams", row 1 The _Streams table in the .xml looks like this: <table name="_Streams"> <col key="yes" def="s62">Name</col> <col def="V0">Data</col> <row> <td>Cabs.w1.cab</td> <td href="media:Cabs.w1.cab"/> </row> </table> If I delete the <row>[...]</row> part of the table, creation of the .msi works fine, the modified file has been correctly replaced inside the .msi. What am I doing wrong here? How to avoid this error? Thanks in advance, Jan |
From: Daniel G. <geh...@li...> - 2002-10-28 13:14:54
|
Tobias, The error 2356 means "Couldn't locate cabinet in stream". It means that the MSI file references a CAB file, but the CAB file could not be found inside the MSI. The problem is that Orca, unlike MSI2XML does not allow you to manipulate binary streams that aren't accessible through a table. Explanation: Binary data is as binary streams in the MSI. Each stream is identified by a unique key. In your case, the CAB's key was "Install01.cab". Orca, however, does not allow you to manipulate streams directly, you have to use the MSIDB tool for this. Streams can however also be accessed as binary table record fields. Binary record fields are also stored as binary streams, but the key of the streams follow a special rule: they are made up of the name of the table containing the binary record field and the primary keys, separated by a dot ('.'). Example: say you have a table "SomeTable", which contains a primary key column "Name" and a binary field column "Data", and you populate this table with a record with Name = "SomeData.CAB", then the data in the binary field is actually stored as a binary stream under the key "SomeTable.SomeData.CAB". That is, if you name all your CABs "Cabs.Install01.cab", "Cabs.Install02.cab" and so on, you could create a table "Cabs" and access the stream through a binary field record if the key fields are set to "Install01.cab", "Install02.cab", ..., respectively. I guess, if you did that, Orca would correctly export these streams. But you don't have to do that. Just use MSIDB to readd the binary streams after exporting. Creating a "view" of the CABs through a table such as "Cabs" is good practice, though. Just as a final remark: the binary streams found under _Streams in MSI2XML are all streams that cannot be accessed through a table. As soon as you create a table that allows access to a binary stream, MSI2XML will export the data right in that table and won't re-export it again in the _Streams table. Regards, Daniel > -----Original Message----- > From: Tobias Eriksson [mailto:tob...@co...] > Sent: lundi, 28. octobre 2002 13:04 > To: Daniel Gehriger > Subject: RE: Msi2xml great tool but where does it store the files? > > > Hi > The wieredest thing happened, I generated the MSI with VSI, > then opened it up in ORCA, and then stored it again, this to > save space. Somewhere I read that when working with the MSI > in ORCA it can grow and grow and grow, and what one should do > then is save it as a new file, this helps a lot. However, now > the package seems to be corrupt, I get the error; "Internal > Error 2356: Install01.cab". > > Have you ever seen this? > > With the new smaller file, I don't have anything in the > '_Streams' table, but in the larger file (some 8-9 megs) I do. > > Regards > Tobias |
From: Daniel G. <geh...@li...> - 2002-10-28 10:07:06
|
Strange... What version are you using ? Could you send me the .msi (a URL would be best) and the command line argument use used ? Regards, Daniel > -----Original Message----- > From: Tobias Eriksson [mailto:tob...@co...]=20 > Sent: Monday, October 28, 2002 11:02 AM > To: Daniel Gehriger > Subject: RE: Msi2xml great tool but where does it store the files? >=20 >=20 > Hi Daniel, > Thanx for the fast response, but if I look in my file there=20 > is a _Streams tag (table) but it looks like this: >=20 > <table name=3D"_Streams"> > <col key=3D"yes" def=3D"s62">Name</col> > <col def=3D"V0">Data</col> > </table> >=20 > I was not able to find any 'cab' entries in the XML file=20 > either, I tried 'grep -i cab flexlm.xml' on my unix machine.=20 > What am I missing here? >=20 >=20 > Regards > Tobias >=20 > Tobias Eriksson > ComOpt AB > Michael L=F6fmans gata 6 > 254 38 Helsingborg, Sweden > Direct: +46 42 389918 > Phone: +46 42 389900 > e-mail: Tob...@co... >=20 >=20 > -----Original Message----- > From: Daniel Gehriger [mailto:geh...@li...]=20 > Sent: 28 October 2002 10:40 > To: Tobias Eriksson > Cc: msi...@li... > Subject: RE: Msi2xml great tool but where does it store the files? >=20 >=20 > Tobias, >=20 > Unless you use the "-b" switch on msi2xml, all binary data is=20 > stored as a base64 encoded character stream (similar as=20 > attachments in e-mail > messages) right in the XML file.=20 >=20 > The installation files are usually compressed into CAB files.=20 > These CAB files are stored as so-called binary streams in the=20 > MSI file. MSI2XML dumps all binary streams at the very bottom=20 > of the XML file in a table with name "_Streams". If, however,=20 > a table exists whose name matches the first part of the=20 > identifier of such a stream (eg. Table "Cabs", stream id=20 > "Cabs.SomeName.cab"), then the stream will be dumped right in=20 > that table and ommited from the _Streams table. This behavior=20 > reflects . >=20 > I usually use the "-b" switch, which does not store the data=20 > in the XML file, which can get huge. Rather it extracts all=20 > binary data to the specified folder and just includes a link=20 > to the data in the XML file (href=3D"SomeName.cab"). You then=20 > can modify the data and XML2MSI will include it in the=20 > generated MSI file.=20 >=20 > As I'm writing this, I'm adding yet another option ("-c"),=20 > which not only extracts the binary data, but also further=20 > extracts the compressed files from the stored CABs. XML2MSI=20 > then first compresses the files into CABs, then stores the=20 > CABs in the MSI file. This makes automating build processes=20 > yet easier. I'll post an update later that week. >=20 > Regards, >=20 > Daniel >=20 >=20 > > -----Original Message----- > > From: Tobias Eriksson [mailto:tob...@co...] > > Sent: Monday, October 28, 2002 10:19 AM > > To: geh...@li... > > Subject: Msi2xml great tool but where does it store the files? > >=20 > >=20 > > Hi > > I found your tool on SourceForge and thought it was the=20 > greatest, as > > I've been browsing through the XML file, I just don't=20 > understand where >=20 > > the actual files are stored. So the questions is thus where=20 > in the XML >=20 > > are the files stored? > >=20 > > Thanx for a GREAT tool > > Tobias > >=20 > > Tobias Eriksson > > ComOpt AB > > Michael L=F6fmans gata 6 > > 254 38 Helsingborg, Sweden > > Direct: +46 42 389918 > > Phone: +46 42 389900 > > e-mail: Tob...@co... > >=20 >=20 |
From: Daniel G. <geh...@li...> - 2002-10-28 09:40:34
|
Tobias, Unless you use the "-b" switch on msi2xml, all binary data is stored as a base64 encoded character stream (similar as attachments in e-mail messages) right in the XML file.=20 The installation files are usually compressed into CAB files. These CAB files are stored as so-called binary streams in the MSI file. MSI2XML dumps all binary streams at the very bottom of the XML file in a table with name "_Streams". If, however, a table exists whose name matches the first part of the identifier of such a stream (eg. Table "Cabs", stream id "Cabs.SomeName.cab"), then the stream will be dumped right in that table and ommited from the _Streams table. This behavior reflects . I usually use the "-b" switch, which does not store the data in the XML file, which can get huge. Rather it extracts all binary data to the specified folder and just includes a link to the data in the XML file (href=3D"SomeName.cab"). You then can modify the data and XML2MSI will include it in the generated MSI file.=20 As I'm writing this, I'm adding yet another option ("-c"), which not only extracts the binary data, but also further extracts the compressed files from the stored CABs. XML2MSI then first compresses the files into CABs, then stores the CABs in the MSI file. This makes automating build processes yet easier. I'll post an update later that week. Regards, Daniel > -----Original Message----- > From: Tobias Eriksson [mailto:tob...@co...] > Sent: Monday, October 28, 2002 10:19 AM > To: geh...@li... > Subject: Msi2xml great tool but where does it store the files? >=20 >=20 > Hi > I found your tool on SourceForge and thought it was the > greatest, as I've been browsing through the XML file, I just=20 > don't understand where the actual files are stored. So the=20 > questions is thus where in the XML are the files stored? >=20 > Thanx for a GREAT tool > Tobias >=20 > Tobias Eriksson > ComOpt AB > Michael L=F6fmans gata 6 > 254 38 Helsingborg, Sweden > Direct: +46 42 389918 > Phone: +46 42 389900 > e-mail: Tob...@co... >=20 |
From: Daniel G. <dge...@us...> - 2002-10-27 19:25:41
|
Update of /cvsroot/msi2xml/msi2xml/msi2xml In directory usw-pr-cvs1:/tmp/cvs-serv6198/msi2xml Modified Files: msi2xml.cpp Log Message: no message Index: msi2xml.cpp =================================================================== RCS file: /cvsroot/msi2xml/msi2xml/msi2xml/msi2xml.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** msi2xml.cpp 26 Oct 2002 16:50:29 -0000 1.8 --- msi2xml.cpp 27 Oct 2002 19:23:46 -0000 1.9 *************** *** 1,3 **** ! //------------------------------------------------------------------ // // $Id$ --- 1,3 ---- ! //------------------------------------------------------------------------------ // // $Id$ *************** *** 24,28 **** // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // ! //------------------------------------------------------------------ #include "stdafx.h" #include "resource.h" --- 24,28 ---- // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // ! //------------------------------------------------------------------------------ #include "stdafx.h" #include "resource.h" *************** *** 33,39 **** #include "_BldNum.h" ! //------------------------------------------------------------------ // MS-XML include files ! //------------------------------------------------------------------ #if _MSC_VER >= 1200 #import <msxml4.dll> rename_namespace("xml") --- 33,39 ---- #include "_BldNum.h" ! //------------------------------------------------------------------------------ // MS-XML include files ! //------------------------------------------------------------------------------ #if _MSC_VER >= 1200 #import <msxml4.dll> rename_namespace("xml") *************** *** 47,53 **** #endif ! //------------------------------------------------------------------ // MSI include files ! //------------------------------------------------------------------ #include <Msi.h> // ^^^^^^^ --- 47,53 ---- #endif ! //------------------------------------------------------------------------------ // MSI include files ! //------------------------------------------------------------------------------ #include <Msi.h> // ^^^^^^^ *************** *** 62,68 **** #include <Msiquery.h> ! //------------------------------------------------------------------ // STL include files ! //------------------------------------------------------------------ #include <list> #include <deque> --- 62,68 ---- #include <Msiquery.h> ! //------------------------------------------------------------------------------ // STL include files ! //------------------------------------------------------------------------------ #include <list> #include <deque> *************** *** 78,84 **** #include <limits> ! //------------------------------------------------------------------ // Helper function for return code validation ! //------------------------------------------------------------------ #ifdef _DEBUG #include <crtdbg.h> --- 78,84 ---- #include <limits> ! //------------------------------------------------------------------------------ // Helper function for return code validation ! //------------------------------------------------------------------------------ #ifdef _DEBUG #include <crtdbg.h> *************** *** 94,100 **** #endif ! //------------------------------------------------------------------ // Define UNICODE aware classes ! //------------------------------------------------------------------ typedef std::basic_istringstream<TCHAR> tistringstream; typedef std::basic_ostringstream<TCHAR> tostringstream; --- 94,100 ---- #endif ! //------------------------------------------------------------------------------ // Define UNICODE aware classes ! //------------------------------------------------------------------------------ typedef std::basic_istringstream<TCHAR> tistringstream; typedef std::basic_ostringstream<TCHAR> tostringstream; *************** *** 109,128 **** #endif ! //------------------------------------------------------------------ // Fix "for" scoping rules to conform to ANSI C++ ! //------------------------------------------------------------------ #if _MSC_VER <= 1200 #define for if(0)__assume(0);else for #endif ! //------------------------------------------------------------------ // Binary stream chunk size and corresponding size of base64 encoded data ! //------------------------------------------------------------------ #define CHUNK_BIN 54 #define CHUNK_BASE64 (4 * CHUNK_BIN / 3 + 1) ! //------------------------------------------------------------------ // Define smart handles ! //------------------------------------------------------------------ //>>>> If you are getting error messages from the compiler, see <<<< //>>>> http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q216722 <<<< --- 109,137 ---- #endif ! //------------------------------------------------------------------------------ ! // Pipe structures ! //------------------------------------------------------------------------------ ! struct PipeInfo ! { ! HANDLE pipe; ! std::deque<char> buf; ! }; ! ! //------------------------------------------------------------------------------ // Fix "for" scoping rules to conform to ANSI C++ ! //------------------------------------------------------------------------------ #if _MSC_VER <= 1200 #define for if(0)__assume(0);else for #endif ! //------------------------------------------------------------------------------ // Binary stream chunk size and corresponding size of base64 encoded data ! //------------------------------------------------------------------------------ #define CHUNK_BIN 54 #define CHUNK_BASE64 (4 * CHUNK_BIN / 3 + 1) ! //------------------------------------------------------------------------------ // Define smart handles ! //------------------------------------------------------------------------------ //>>>> If you are getting error messages from the compiler, see <<<< //>>>> http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q216722 <<<< *************** *** 133,139 **** typedef SmrtHandle<LPCVOID, BOOL, UnmapViewOfFile> SmrtFileMap; ! //------------------------------------------------------------------ // declarations ! //------------------------------------------------------------------ void checkMSXML(); --- 142,148 ---- typedef SmrtHandle<LPCVOID, BOOL, UnmapViewOfFile> SmrtFileMap; ! //------------------------------------------------------------------------------ // declarations ! //------------------------------------------------------------------------------ void checkMSXML(); *************** *** 143,146 **** --- 152,163 ---- const xml::IXMLDOMDocument2Ptr& pDoc); + void extractCabs( + const SmrtMsiHandle& hDb, + const xml::IXMLDOMNodePtr& pNodeMsi, + const xml::IXMLDOMDocument2Ptr& pDoc); + + DWORD WINAPI readFromPipe( + LPVOID args); + void indent( const xml::IXMLDOMDocument2Ptr& pDoc, *************** *** 186,213 **** WORD idRes); ! //------------------------------------------------------------------ // global variables ! //------------------------------------------------------------------ #define BUF_SIZE 512 // initial buffer size (arbitrary) ! namespace { ! tstring strInFile; // input file ! tstring strOutFile; // output file ! tstring strBinPath; // full path for binary files ! tstring strBinDir; // directory for binary files ! tstring strXmlEncoding; // XML encoding ! tstring strStyleSheet; // name of alternative stylesheet ! bool bDefStyleSheet = true; // use default stylesheet ! bool bBinDump = false; // write external binary files ! bool bSort = true; // sort rows according to first field ! bool bDataTypes = true; // include datatypes in XML file ! bool bQuiet = false; // don't show progress ! std::set<tstring> streamIds; // ids of extracted streams } ! //------------------------------------------------------------------ // // Main entry // ! //------------------------------------------------------------------ int __cdecl _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { --- 203,233 ---- WORD idRes); ! //------------------------------------------------------------------------------ // global variables ! //------------------------------------------------------------------------------ #define BUF_SIZE 512 // initial buffer size (arbitrary) ! namespace ! { ! tstring strInFile; // input file ! tstring strOutFile; // output file ! tstring strBinPath; // full path for binary files ! tstring strCabDir; // full path for extracted CAB files ! tstring strBinDir; // directory for binary files ! tstring strXmlEncoding; // XML encoding ! tstring strStyleSheet; // name of alternative stylesheet ! bool bDefStyleSheet = true; // use default stylesheet ! bool bBinDump = false; // write external binary files ! bool bCabExtract = false; // extract content of cabinet files ! bool bSort = true; // sort rows according to first field ! bool bDataTypes = true; // include datatypes in XML file ! bool bQuiet = false; // don't show progress ! std::set<tstring> streamIds; // ids of extracted streams } ! //------------------------------------------------------------------------------ // // Main entry // ! //------------------------------------------------------------------------------ int __cdecl _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { *************** *** 383,391 **** } ! //------------------------------------------------------------------ // // Check if MSXML 3.0 (or higher) is installed in side-by-side mode // ! //------------------------------------------------------------------ void checkMSXML() { --- 403,411 ---- } ! //------------------------------------------------------------------------------ // // Check if MSXML 3.0 (or higher) is installed in side-by-side mode // ! //------------------------------------------------------------------------------ void checkMSXML() { *************** *** 418,426 **** } ! //------------------------------------------------------------------ // // Dump summary information // ! //------------------------------------------------------------------ void listSummaryInformation(const SmrtMsiHandle& hDb, const xml::IXMLDOMNodePtr& pNodeMsi, --- 438,446 ---- } ! //------------------------------------------------------------------------------ // // Dump summary information // ! //------------------------------------------------------------------------------ void listSummaryInformation(const SmrtMsiHandle& hDb, const xml::IXMLDOMNodePtr& pNodeMsi, *************** *** 521,529 **** } ! //------------------------------------------------------------------ ! // // List column headers ! // ! //------------------------------------------------------------------ void listCols(const SmrtMsiHandle& hDb, LPCTSTR szTable, --- 541,682 ---- } ! //------------------------------------------------------------------------------ ! // Extract cabinet files ! //------------------------------------------------------------------------------ ! void extractCabs(const SmrtMsiHandle& hDb, ! const xml::IXMLDOMNodePtr& pNodeMsi, ! const xml::IXMLDOMDocument2Ptr& pDoc) ! { ! // extract cab files listed in Media table ! indent(pDoc, pNodeMsi, 1); ! indent(pDoc, pNodeMsi, 1); ! xml::IXMLDOMElementPtr pElement(pDoc->createElement(L"cabs")); ! xml::IXMLDOMNodePtr pNodeCabs(pNodeMsi->appendChild(pElement)); ! ! // list the rows ! SmrtMsiHandle hViewMedia; ! OK(MsiDatabaseOpenView(hDb, _T("SELECT `Cabinet` FROM `Media`"), &hViewMedia)); ! OK(MsiViewExecute(hViewMedia, NULL)); ! ! // iterate over rows ! UINT res; ! SmrtMsiHandle hRec; ! tcharvector buf(BUF_SIZE); ! DWORD len; ! while ((res = MsiViewFetch(hViewMedia, &hRec)) != ERROR_NO_MORE_ITEMS) ! { ! OK(MsiRecordGetString(hRec, 1, &buf[0], &(len=buf.size()))); ! tstring cab(&buf[0]); ! ! // skip if empty or not embedded cabinet file (ie no leading '#') ! if (cab.empty() || cab[0] != _T('#')) ! continue; ! ! // dump cab stream to temporary file ! tstring query = _T("SELECT `Data` FROM `_Streams` WHERE `Name`='") + cab.substr(1) + _T("'"); ! SmrtMsiHandle hViewStream; ! OK(MsiDatabaseOpenView(hDb, query.c_str(), &hViewStream)); ! OK(MsiViewExecute(hViewStream, NULL)); ! ! // fetch the stream ! SmrtMsiHandle hRecStream; ! if (MsiViewFetch(hViewStream, &hRecStream) == ERROR_NO_MORE_ITEMS) ! continue; ! ! // read binary data ! DWORD cbSize = MsiRecordDataSize(hRecStream, 1); ! std::vector<char> bufBinary(cbSize+1); ! OK(MsiRecordReadStream(hRecStream, 1, &bufBinary[0], &cbSize)); ! ! // prepare temporary file ! TCHAR tmpDir[MAX_PATH], tmpCabPath[MAX_PATH]; ! GetTempPath(MAX_PATH, tmpDir); ! GetTempFileName(tmpDir, _T("cab"), 0, tmpCabPath); ! SmrtFileHandle hFile(CreateFile(tmpCabPath, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL)); ! if (hFile.isNull()) ! continue; ! ! // write file ! DWORD dwWritten = 0; ! WriteFile(hFile, (LPCVOID)&bufBinary[0], cbSize, &dwWritten, NULL); ! CloseHandle(hFile.release()); ! ! // create col element ! indent(pDoc, pNodeCabs, 2); ! xml::IXMLDOMElementPtr pElement; ! pElement = pDoc->createElement(L"cab"); ! pElement->setAttribute(L"name", cab.substr(1).c_str()); ! pNodeCabs->appendChild(pElement); ! ! // prepare data structures for child pricess ! STARTUPINFO si = { sizeof STARTUPINFO }; ! si.dwFlags = STARTF_USESTDHANDLES; ! si.hStdInput = INVALID_HANDLE_VALUE; ! si.hStdError = INVALID_HANDLE_VALUE; ! ! HANDLE hDummy; ! PipeInfo out; ! out.pipe = INVALID_HANDLE_VALUE; ! ! SECURITY_ATTRIBUTES sa = { sizeof SECURITY_ATTRIBUTES }; ! sa.bInheritHandle = TRUE; ! CreatePipe(&out.pipe, &hDummy, &sa, 0); ! DuplicateHandle(GetCurrentProcess(), hDummy, GetCurrentProcess(), &si.hStdOutput, 0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE); ! ! PROCESS_INFORMATION pi; ! ! // extract from cab files ! tstring cmd = _T("extract.exe \"") + tstring(tmpCabPath) + _T("\" /e /y /l \"") + strCabDir + _T("\" "); ! if (!CreateProcess(NULL, cmd.c_str(), NULL, NULL, TRUE, DETACHED_PROCESS, NULL, NULL, &si, &pi)) ! { ! tcerr << _T("Error: unable to run extract.exe (") << cmd << _T(")") << std::endl; ! continue; ! } ! ! CloseHandle(si.hStdOutput); ! WaitForInputIdle(pi.hProcess, INFINITE); ! CloseHandle(pi.hThread); ! ! // start pipe reader ! DWORD threadId; ! HANDLE hThread = CreateThread(NULL, 0, readFromPipe, &out, 0, &threadId); ! ! // block until extracted ! WaitForSingleObject(pi.hProcess, INFINITE); ! CloseHandle(pi.hProcess); ! ! // wait for pipe readers ! WaitForSingleObject(pi.hProcess, INFINITE); ! CloseHandle(pi.hProcess); ! ! // save Id so that cab does not get extracted anymore ! streamIds.insert(cab.substr(1)); ! ! // delete cab file ! DeleteFile(tmpCabPath); ! } ! ! } ! ! //------------------------------------------------------------------------------ ! DWORD WINAPI readFromPipe(LPVOID args) ! { ! PipeInfo* out = reinterpret_cast<PipeInfo*>(args); ! ! char buf[32]; ! DWORD dwRead; ! while (ReadFile(out->pipe, buf, 32, &dwRead, 0L) && dwRead != 0) ! { ! out->buf.insert(out->buf.end(), buf, buf + dwRead); ! } ! ! CloseHandle(out->pipe); ! return 0; ! } ! ! ! //------------------------------------------------------------------------------ // List column headers ! //------------------------------------------------------------------------------ void listCols(const SmrtMsiHandle& hDb, LPCTSTR szTable, *************** *** 626,634 **** } ! //------------------------------------------------------------------ // // List rows // ! //------------------------------------------------------------------ void listRows(const SmrtMsiHandle& hDb, LPCTSTR szTable, --- 779,787 ---- } ! //------------------------------------------------------------------------------ // // List rows // ! //------------------------------------------------------------------------------ void listRows(const SmrtMsiHandle& hDb, LPCTSTR szTable, *************** *** 661,665 **** SmrtMsiHandle hRecRow; UINT res; - tcharvector buf(BUF_SIZE); DWORD len; --- 814,817 ---- *************** *** 723,731 **** case 'v': { // binary data ! // create id from column 1 static int nCnt = 0; tostringstream oss; while ((res = MsiRecordGetString(hRecInfo, 1, &buf[0], &(len=buf.size()))) == ERROR_MORE_DATA) buf.resize(len+1); OK(res); if (tolower(buf[0]) != _T('v')) { --- 875,887 ---- case 'v': { // binary data ! // create stream id from column 1 ! // MSDN: "Binary data is stored with an index name created by ! // concatenating the table name and the values of the ! // record's primary keys using a period delimiter." static int nCnt = 0; tostringstream oss; while ((res = MsiRecordGetString(hRecInfo, 1, &buf[0], &(len=buf.size()))) == ERROR_MORE_DATA) buf.resize(len+1); OK(res); + if (tolower(buf[0]) != _T('v')) { *************** *** 751,759 **** } ! //------------------------------------------------------------------ // // Dump _Streams table // ! //------------------------------------------------------------------ void dumpStreams(const SmrtMsiHandle& hDb, const xml::IXMLDOMNodePtr& pNodeTable, --- 907,915 ---- } ! //------------------------------------------------------------------------------ // // Dump _Streams table // ! //------------------------------------------------------------------------------ void dumpStreams(const SmrtMsiHandle& hDb, const xml::IXMLDOMNodePtr& pNodeTable, *************** *** 806,810 **** tstring strId(&buf[0]); ! if (streamIds.find(strId) != streamIds.end()) continue; // already extracted // search insert location --- 962,967 ---- tstring strId(&buf[0]); ! if (streamIds.find(strId) != streamIds.end()) ! continue; // already extracted // search insert location *************** *** 849,863 **** } ! //------------------------------------------------------------------ // // Get msi codepage // ! //------------------------------------------------------------------ long getCodePage(const SmrtMsiHandle& hDb) { unsigned uCodePage; ! char szTmpDir[_MAX_PATH]; ! char szTmpFile[_MAX_PATH]; ! GetTempPathA(_MAX_PATH, szTmpDir); GetTempFileNameA(szTmpDir, "msi", 0, szTmpFile); OK(MsiDatabaseExportA(hDb, "_ForceCodepage", szTmpDir, szTmpFile + strlen(szTmpDir))); --- 1006,1020 ---- } ! //------------------------------------------------------------------------------ // // Get msi codepage // ! //------------------------------------------------------------------------------ long getCodePage(const SmrtMsiHandle& hDb) { unsigned uCodePage; ! char szTmpDir[MAX_PATH]; ! char szTmpFile[MAX_PATH]; ! GetTempPathA(MAX_PATH, szTmpDir); GetTempFileNameA(szTmpDir, "msi", 0, szTmpFile); OK(MsiDatabaseExportA(hDb, "_ForceCodepage", szTmpDir, szTmpFile + strlen(szTmpDir))); *************** *** 883,891 **** } ! //------------------------------------------------------------------ ! // // Extract binary stream ! // ! //------------------------------------------------------------------ void writeBinaryStream(const tstring& strId, const xml::IXMLDOMElementPtr& pElementTd, --- 1040,1046 ---- } ! //------------------------------------------------------------------------------ // Extract binary stream ! //------------------------------------------------------------------------------ void writeBinaryStream(const tstring& strId, const xml::IXMLDOMElementPtr& pElementTd, *************** *** 1050,1058 **** ! //------------------------------------------------------------------ // // Indent // ! //------------------------------------------------------------------ void indent(const xml::IXMLDOMDocument2Ptr& pDoc, const xml::IXMLDOMNodePtr& pParent, --- 1205,1213 ---- ! //------------------------------------------------------------------------------ // // Indent // ! //------------------------------------------------------------------------------ void indent(const xml::IXMLDOMDocument2Ptr& pDoc, const xml::IXMLDOMNodePtr& pParent, *************** *** 1065,1077 **** } ! //------------------------------------------------------------------ // // Parse command line // ! //------------------------------------------------------------------ void parseCommandLine(int argc, TCHAR* argv[]) { ! static TCHAR infile[_MAX_PATH]; ! static TCHAR outfile[_MAX_PATH]; TCHAR drive[_MAX_DRIVE]; TCHAR dir[_MAX_DIR]; --- 1220,1232 ---- } ! //------------------------------------------------------------------------------ // // Parse command line // ! //------------------------------------------------------------------------------ void parseCommandLine(int argc, TCHAR* argv[]) { ! static TCHAR infile[MAX_PATH]; ! static TCHAR outfile[MAX_PATH]; TCHAR drive[_MAX_DRIVE]; TCHAR dir[_MAX_DIR]; *************** *** 1096,1100 **** int c; ! while ((c = getopt(argc, argv, _T("qdnls:b:o:e:"))) != EOF) { if (optarg != NULL && (*optarg == _T('-') || *optarg == _T('/')) || --- 1251,1255 ---- int c; ! while ((c = getopt(argc, argv, _T("qdnls:b:o:e:c:"))) != EOF) { if (optarg != NULL && (*optarg == _T('-') || *optarg == _T('/')) || *************** *** 1135,1138 **** --- 1290,1304 ---- break; + case 'c': // extract cabinet files + bCabExtract = true; + if (optarg) strCabDir = optarg; + if (strCabDir.find_first_of(_T(":/\\")) != tstring::npos) + { + tcerr << _T("Invalid folder name specified: ") << strCabDir << std::endl << std::endl; + printUsage(); + exit(2); + } + break; + case 'o': // out file if (!optarg) *************** *** 1215,1219 **** if (bDefStyleSheet) { ! TCHAR szStyleSheet[_MAX_PATH]; _tsplitpath(strOutFile.c_str(), drive, dir, NULL, NULL); _tmakepath(szStyleSheet, drive, dir, _T("msi.xsl"), NULL); --- 1381,1385 ---- if (bDefStyleSheet) { ! TCHAR szStyleSheet[MAX_PATH]; _tsplitpath(strOutFile.c_str(), drive, dir, NULL, NULL); _tmakepath(szStyleSheet, drive, dir, _T("msi.xsl"), NULL); *************** *** 1250,1254 **** if (bBinDump) { ! TCHAR path[_MAX_PATH]; _tsplitpath(strOutFile.c_str(), drive, dir, NULL, NULL); _tmakepath(path, drive, dir, strBinDir.c_str(), NULL); --- 1416,1420 ---- if (bBinDump) { ! TCHAR path[MAX_PATH]; _tsplitpath(strOutFile.c_str(), drive, dir, NULL, NULL); _tmakepath(path, drive, dir, strBinDir.c_str(), NULL); *************** *** 1270,1282 **** } ! //------------------------------------------------------------------ // // Print usage message // ! //------------------------------------------------------------------ void printUsage() { tcerr << _T("Usage: ") << std::endl; ! tcerr << _T("msi2xml [-q] [-n] [-d] [-e encoding] [-s [name]] [-b [folder]] [-o file] file\n"); tcerr << _T(" -q quiet processing") << std::endl; tcerr << _T(" -n disable sorting of rows") << std::endl; --- 1436,1448 ---- } ! //------------------------------------------------------------------------------ // // Print usage message // ! //------------------------------------------------------------------------------ void printUsage() { tcerr << _T("Usage: ") << std::endl; ! tcerr << _T("msi2xml [-q] [-n] [-d] [-e encoding] [-s [name]] [-b [folder]] [-c [folder]] [-o file] file\n"); tcerr << _T(" -q quiet processing") << std::endl; tcerr << _T(" -n disable sorting of rows") << std::endl; *************** *** 1285,1295 **** tcerr << _T(" -s disable default XSL stylesheet") << std::endl; tcerr << _T(" -s name use XSL stylesheet 'name'") << std::endl; ! tcerr << _T(" -b save binary stream to external files") << std::endl; ! tcerr << _T(" -b folder save binary stream to external files in 'folder'") << std::endl; tcerr << _T(" -o file write XML file to 'file'") << std::endl; tcerr << _T(" file MSI file") << std::endl << std::endl; } ! //------------------------------------------------------------------ // // Load text resource --- 1451,1463 ---- tcerr << _T(" -s disable default XSL stylesheet") << std::endl; tcerr << _T(" -s name use XSL stylesheet 'name'") << std::endl; ! tcerr << _T(" -b save binary streams to external files") << std::endl; ! tcerr << _T(" -b folder save binary streams to external files in 'folder'") << std::endl; ! tcerr << _T(" -c extract content of cabinet files") << std::endl; ! tcerr << _T(" -c folder extract content of cabinet files to 'folder'") << std::endl; tcerr << _T(" -o file write XML file to 'file'") << std::endl; tcerr << _T(" file MSI file") << std::endl << std::endl; } ! //------------------------------------------------------------------------------ // // Load text resource *************** *** 1303,1307 **** // pointer to text array // ! //------------------------------------------------------------------ LPCSTR loadTextResource(WORD idRes) { --- 1471,1475 ---- // pointer to text array // ! //------------------------------------------------------------------------------ LPCSTR loadTextResource(WORD idRes) { |
From: Daniel G. <dge...@us...> - 2002-10-27 19:25:41
|
Update of /cvsroot/msi2xml/msi2xml In directory usw-pr-cvs1:/tmp/cvs-serv6198 Added Files: MakeCab.exe extract.exe Log Message: no message --- NEW FILE: MakeCab.exe --- MZ $ 3À]_^[ÄDÃl$X\$hûA 3À]_^[ÄDÃþtþ tþ tëÇE f¹ÿÿÿÿRP+Àò®÷Ñ+ùÑ÷¹ÿÿÿÿ|$\Ç´ [ÃD$ 8 ;Ç|Ç_^[ÃD$Vh,öA ;Ç|Ç_^[ÃD$Vh< Å]_^[ÄÃ;ý~/D$Vhx B B B B B SVè±3 B 3À]_^[Ä(ÃUFpPèP 3À]_^[Ä(ÃUFÇFp 3ÀD$D$D$L$PQh B QPèv 3À]_^[Ä4Ã~ 3À]_^[Ä4ÃhÀñA öÃth0B ýÿÿÄ]_^[ÃÌÌD$L$PQD$ÀPRè¶y ø~øtP3À_^[Ã|$WVèÜ B 3À]_^[ÄDÃ|$` 3À]_^[ÄDÃD$]_^H¸ 3À]_^[ÄDÃU 3À]_^[ÄÃUChõA 3À]_^[ÄÃ|$ 3À]_^[ÄÃUhè;B 3À]_^[ÄÃhè<B 3À]_^[ÄÃPè> 3À]_^[ÄÃUVSèÕK 3À]_^[Äû¨ 3À]_^[ÄÃUSè3 3À]_^[ÄÃUSè 3À]_^[ÄÃUCh$õA 3À]_^[ÄÃf öt"L$QhüA 3À]_^[ÄÃUSè 3À]_^[ÄÃU 3À]_^[Äà ötUjhè=B 3À]_^[ÄÃUShÀS@ B B 3À]_^[ÄÃSPj 3À]_^[ÄÃ|$ 3À]_^[ÄÃSj 3À]_^[ÄÃý¹ÿÿÿÿ+Àò®÷ÑI É~ )HPè<# 3À]_^[ÄÃSFWPVèÆ= $h ëT$f fHö@t fHfJëfJfHö@tf@ fB¸ ¸ÿÿÿÿ]_^[Ã3À]_^[ÃÌÌÌD$VT$0HD$QPVRè%÷ÿÿÄ Àu3À^Ã3ÀF$F(¸ 3ÀD$D$~@¾´ 3À]_^[ÄÃú¹ÿÿÿÿ+Àò®÷ÑYÿ;\$ |"D$$PhüA <\t</tñB: 3À]_^[Ä Ã|$ u'L$,UQPè ÌÌÌÌÌVt$ ¸ Ç? ¼$ ¼$ þ:tþ\uBB: VWèx H ÀuFGëNH ¸ 3À]_^[Ä,ÃD$@VhôñA 3À]_^[Ä<ÃD$Th B 3À]_^[ÄÃESPÅèPáÿÿÄUhèüA 3À]_^[ÄÃOG( Àu ¸ , 3À]_^[ÄÃWL$PQè/ ÌÌÌÌÌÌÌÌÌÌÌÌSV\$WU; ¸ tpù tùtvÿ~WOCÿFëBVF9FsÏ~ C+Ý]Ã_^[ÃÇF C+Å]_^[ÃÇF H F ÉuGëAVèL PQèü ÀtB«$ëóuÉÿA ÀtF£$ròÁÄ ^ÉÃÌÌUìV3ÀPPPPPPPPU.À ÀtB«$ëóu Àt F£$sóFÿÄ ^ÉÃÌÌÌÌÌÌSVt$WU¿ B8ÙtÑÉtQ÷ ¿ÿþþ~Á÷3Ëðùñÿðÿ3Ï3ÆÂá PèY: u"f¡ò>B u À}t$jQVPè u À}º ÇD$( tBIE D$j 3À]_^[ÄÃPèE uÉëáû|$(÷D$ÇD$;Çï uÆÆ é ÿaB uÆ ë>Æ GD$M uÆ ëD$$jjÿPèy tÆ G;t$&ÿÿÿëE uÆ FGGÇL$$+Á= ÿaB @t$0 ÿaB Ç4B ¡4B ät! ÀtFG8ür8Üwæ8ør8ØwÆ8Äu Iu×3É8ÄtK¹ÿÿÿÿrD÷Ùë@3À3ÛÀÀt#ÛtFGQPSè~ ]_^[Ä\ 3ÀÇIuøãu D$[^_ÃÌÌì 3À]_^[ÄÃ\$,÷C 3À]_^[ÄÃl$,÷E jè¹ jÿèLáÿÿÄè$; áÿÿ¡'B Çx'B BAú ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌL$D$+ jè~þÿÿÄÃÌÌÌÌÌÌÌÌÌÌSV\$WU=/B ¹ð Ç0RB jèhôÿÿŰ/B ÇÃK Àuð+|$ÁÿéÁ d$(ÿd$, ûgu½ ÌÌÌÌÌÌÌÌÌÌÌÌÌÌT$BHBxL$ 3ÀA ëL$RQè D$ 3ÀfD$HD$$D$%ÿÿ Æ@ ×Vl$<¹< ×Vl$¹ 3À]_^[ÄÃD$$3Éÿ02B <EtB: uJB@ ÉuöÃÌÌÌÌÌÌÌÙîD$ÜßàöÄA¸ ÄÃÌÌÌÌ=2B |¾ Çô&B jèoÔÿÿÄ U O@ëOFþ|¡ BB j PFèK±ÿÿÄÃG;=0RB fúZwf F3Ûf¶NÿÙöÉ4B fùZwfÁ f;Êuf Ò ÿÿÿ3À^[ÃÀ^à[HÃÌÌÌÌÌÌÌÌÌÌÌÌìSVWUl$ í¯ SQ» 4B Ç´4B t¡°4B j èðÅÿÿÄ-`'B j è²ÅÿÿÄý¹ÿÿÿÿ+Àò®÷Ñ+ùÁÁé÷;Ãó¥Èáó¤l$} jèêÄÿÿÄD$L$T$PQPWVè ú tFú tA Ût7 Àt!3ÛÚöÉ4B T$Ç 3À]_^[ÄÃ=À4B 3À]_^[ÄÃf? 3À]_^[ÄÃë; 3À]_^[Äà íuè_ jôÿbB u ÉtH:JuÀ Éuä3ÀëÀØÿ ÀL Pjj ù ù SV3ÛfØWUãÿ ÄÃù uT$0]_^[ÄÃÌÌÌÌÌD$hØ8B = Àt.F'G8Ätò,A<Éá ÁAà,A<Éá ÁA8àtÒÀÿ¾Àë4¸ÿ Àt'FG8ØtòPSèO ÿÿØÄèE ÿÿÄ8ÃtÚÀØÿ[^_ÉÃÌÌÌÌD$L$PQj ]_^[ÄÃÌÌÌÌÌÌÌÌìTSVÇD$ t< uFëëFùP ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ûÿÿD$l|$ ÇD$4 ÇD$8 PD$$]_^[ÄTÃ\IA f@fBÆGé% f@fBÆGéë 3À]_^[Ä Ã í~R|$s ¸ 3À]_^[Ä ÃD$ÀPè5iÿÿD$Ä Àu 3À]_^[Ä ÃD$L$T$LPQUSjRÿôaB 3À]_^[ÄÃ='B j èËÿÿÄ> U3ÿT$4fR |$fÂ|$f3Á|$f% ÿD$ëÿD$f|$ÿr*ÇF T$]V_^[ÄÃÇF D$ D$ëHVèuÿÿD$Ä Àt73ÀE ¸ ÇD$4 Çp 3À]_^[ÄÃ3öfu9·L 3À]_^[ÄÃD$$L$Pd j ¸ A ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ Ût}¹ BfÿB3ÀfB9Bw ÇB( ëfÇ f ÇF8  ÁèÁê;ÐwÂL$ ÁL$;ÁrD\$ Ût<|$$jWnXVèøÿÿL$ÄE àøE V,fÿFF3ÿf~Pþ;×v-fÁVöÐ:fF~f@fÑfÁêfF·ÀöÒ8fÿFëJ;ør ÇF( 3öft)sT{@|«D$T$PC@+ÂÁøøð|VUSNèê èMf8 ¿ ~;Ítn;Þ~ f´¨ fÿÔ ¿ ¹ ;D$1 .3ÀfÖ ¹ fÿ° ¸ Wt$D$ f9FH. 8 PVè D$ÿC$@LÕS(I|Å ;øw+ïÅ @% @% ý' ¸ 3À9é \ \ Óç ~*F<[º ßÁëÃ"ëÇÁè 0\ ÚÁëÃ"ëD$Áè 0\ L$,AD$ë59t$}þ2}zD$ t$;Æ|ÆD$T$ L$,AD$;L$4KÿÿÿT$D$]_^Ç - unable to initialize heap - not enough space for lowio initialization - not enough space for stdio initialization - pure virtual function call - not enough space for _onexit/atexit table - unable to open console device - unexpected heap error - unexpected multithread lock error - not enough space for thread data abnormal program termination - not enough space for environment - not enough space for arguments - floating point not loaded Program: ¥ú¨µ5l²BÖÉ»Û@ù¼¬ãlØ2u\ßEÏ ÖÜY=Ñ«¬0Ù&: ªÉ| Ý<qPªA'¾ É%µhW³ o Ôf¹äaÎùÞ^ÉÙ)"а´¨×Ç=³Y ´.;\½·lºÀ ¸í¶³¿â¶Ò±t9GÕê¯wÒ&ÛÜscã;d>jm ¨ZjzÏäÿ '® ±}DðÒ£hòþÂi]Wb÷Ëgeq6lçknvÔþà+ÓZzÚÌJÝgoß¹ùùï¾C¾·Õ°`è£ÖÖ~Ñ¡ÄÂØ8RòßOñg»ÑgW¼¦Ýµ?K6²HÚ+ ØL ¯öJ6`zAÃï`ßUßg¨ïn1y¾iF³aËf¼ Òo%6âhRwÌG»¹"/&U¾;ºÅ(½²Z´+j³\§ÿ×Â1ÏеÙ,®Þ[°Âd&òcì£ju m© ?6ë grW îÒ ×TN³9a&g§÷`ÐMGiIÛwn>JjÑ®ÜZÖÙfß@ð;Ø7S®¼©Å»ÞϲGéÿµ0ò½½ÂºÊ0³S¦£´$6к×Í)WÞT¿gÙ#.zf³¸JaÄh]+o*7¾´¡ÃßZï-MAKECAB [/V[n]] [/D var=value ...] [/L dir] source [destination] MAKECAB [/V[n]] [/D var=value ...] /F directive_file [...] source File to compress. destination File name to give compressed file. If omitted, the last character of the source file name is replaced with an underscore (_) and used as the destination. /F directives A file with MakeCAB directives (may be repeated). /D var=value Defines variable with specified value. /L dir Location to place destination (default is current directory). /V[n] Verbosity level (1..3). Copyright (c) Microsoft Corp 1993-1997. All rights reserved. %s ×£p= ×£ø?Zd;ßOnõ?ÃÓ,eâX·Ññ?Ð#GG¬Å§î?@¦¶il¯½7ë?3=¼BzåÕ¿Öç?ÂýýÎawÌ«ä?/L[áMľæÉ?ÄS;uD;¯?Þgº9E±Ï?$#Æâ¼º;1az?aUYÁ~±S|»_?×î/¾ ûD?$?¥é9¥'ê¨*?}¬¡ä¼d|FÐÝU>c{Ì#Twÿ=ú:zc%C1À¬<!Ñ8G¸ d d 9979\9a9f9u9z99è9í9 :t:y::¦:Ã:Î:Ó:þ::;?;r;;ê;<<<<<<<¤<©<®<Ä<,=O=T=¤=Õ=>¡>???ÿ? 33Ê3Ï3x4}4à5676<6|666²6Þ6ã6Q7V7777¨7788M8^8c888®8·8¾8Ù8Þ8-9>9C9o9999±9¿9Ä9$:):«:°:ê:ï:A;F;_;d;°<µ<Ñ<ß<ä< =D=w=¤=ñ=ö=>J>>>? ?)?R?W?â?ç? 1 12®2%3O3e33»3&444Q4a4l4q4~44Ò4ã4ê4ð455550575<5I5N5`5k5Î6Ù6à6í6ú677!7.7M7S7û7"8&8,80868:8@8D8I8N8S89»9Å9 ?º?Ä?ì? 8N8]8m8 9(9 99::;M;¶;Ð;Ù;5<?<O<U<[<c<m<s< <<§<º<Í<à<ó<===;=H=Q=a=k= =¼=Õ=@>L>{>>>>>ü>?[?? 3$353t3}3Ú3ã3ü344:4W4b444¡4«4³4¿4É4Ð4æ4û45"5,555A5Î5Ø5ò5ù5666#606M6U6t6666Å<å<2>F>K>T>X>_>f>l>r>G?Z?¦?·? 11O1T111±1¶1å3ó3ú34434:4D4N444«4Ç45é556L6{66=7I7Y7_7s7§7¹7Ï7Û7í788¹89U999ç<ø<è=j>s>À>É>Ú>?N?¢?¨?®?´? 11k1û> --- NEW FILE: extract.exe --- MZ $ EXTRACT [/Y] source [newname] EXTRACT [/Y] /C source destination cabinet - Cabinet file (contains two or more files). filename - Name of the file to extract from the cabinet. Wild cards and multiple filenames (separated by blanks) may be used. source - Compressed file (a cabinet with only one file). newname - New filename to give the extracted file. If not supplied, the original name is used. /A Process ALL cabinets. Follows cabinet chain starting in first cabinet mentioned. /C Copy source file to destination (to copy from DMF disks). /D Display cabinet directory (use with filename to avoid extract). /E Extract (use instead of *.* to extract all files). /L dir Location to place extracted files (default is current directory). /Y Do not prompt before overwriting an existing file. Copyright (C) Microsoft Corp. 1981-1999. %s Please enter the path where this file may be found, and press ENTER: labeled '%2' into drive %3, and press ENTER. You may enter a different drive and/or path: %s - unable to initialize heap - not enough space for lowio initialization - not enough space for stdio initialization - pure virtual function call - not enough space for _onexit/atexit table - unable to open console device - unexpected heap error - unexpected multithread lock error - not enough space for thread data abnormal program termination - not enough space for environment - not enough space for arguments - floating point not loaded Program: ù:tù\uxj ; ¾¼ Y¾ 9uèu9uìt3À}ü;þtC;ÆÇ PèC E fEêf;E t àþÿÿPh¤ £ðré¯ 9Eø}Eø}ô ¿ jèé jÿè\ MàPQè¾! VPè?9 3À_^][Ä` ÿH D$D$WVèö5 3ÀÇIuøãu D$[^_ÃÌÌ¡°vì ÀSuD$øaß u t$ Æ tG½ T$j 3À_^][ÄÃPè5( uë$ûD$$è÷;Ål$õ uÇÆ é uë:Æ FDë/;t$$u|$( uÆ ëT$ jjÿRèÖ tÆ Fl$;ý1ÿÿÿ+t$$îÅ_^][ÄÃD$D¨@\u+t$$îÅ_^][ÄÃ3À_^][ÄÃ_^]Ç ÀtB«$ëóu Àt F£$sóFÿÄ ^ÉÃÌÌÌÌÌÌUìV3ÀPPPPPPPPU.À ÀtB«$ëóuÉÿA ÀtF£$ròÁÄ ^ÉÃÌÌSUVW|$=LB~3ÀjPèCùÿÿÄë@@3ÉJà ÀtGëÏ3ÀGðþ-îtþ+u3ÉGñ3Û=LB~ jVèúøÿÿÄë@@rà Àt3ÉG\FÐñëÊý-Ãu÷Ø_^][ÃD$PèVÿÿÿÄÃVWhÐiètA À_^][ÄÃøþu èjB BùèBrï^[ÃöÃt ExB^[ÃöÃt MvB^[ÃöÃt UtB^[ÃErB^[ÃöÃt3ÒfQÕîBë5öÃt3ÀfAÅìBë!öÃt3ÒfQÕêBë 3ÀfAÅèBÉtùàuHÉu3À^[ÃVW|$÷¡´iH£´ix °i3ÀA °ië h°ièA tøÿtFëÄ;÷u3ÿÇ_^ÃÇÆ Àt.F'G8Ätò,A<Éá ÁAà,A<Éá ÁA8àtÒÀÿ¾Àë4¸ÿ Àt'FG8ØtòPSè Ç T Àuãµ j èÜÿÿÄ-ôrU j èOÜÿÿÄýÉÿ3Àò®D$÷Ñ+ùÑ÷8Áéó¥ÊáÀó¤D$ðT jèÛÿÿÄL$T$RD$PRVWè X@Aû\tö8"u%öÁu Òt x"u@ë3í\$$3Ò ÛÂT$$ÑéÙI ÛtA ötÆ\FCIuðÉt] Òu ù tTù tO ítE öt*Ùãÿ 3À_^][Äà Éuè Ét-3Àáÿ ;Áw+È| A¸ ñÁéó«ÎáóªBÂÀuÏtv¡pvj öÁtit Ëit ÓitРpuë-øar!øzwitÉ itÈé puëÆpu jèÏÒÿÿÄ s ÆF L$D$3ö À~IM ÃH÷ØÀÀõPÿÕøÿÿt*Wÿd SQ»LGMKCkY[ jôÿ¸ ÇðGðG¡ôG Àu'ÇôGðGëÇE jèþÿÿÄ^ÃQ hS\$UVWL$Aøÿ +Ë G+ÃLG PèÄÿÿÄG¡F;ð|Ô[Ç_^à pv3À ÉuD$L$PQèe$ Ç f¶°puëðf¶ÈGáÿ uH:JtHÉt@ë: tH@ÉuÌ8 Æ@ j iL$ÖN ÒÇD$, ÀÖN Òuð+ÁÑøèé' iL$ÖN ÒÁt 8 ÇD$ öÃt ÆD$" ÇD$$ L$AHAxD$%ÿ @BÉt @BÉuö[ÃD$Ý |#¸gfff÷éÁúÂÁèÐÂÁ¹ ø} ¸ % Rjj -ÿ[&£ðl_^èl][ÃD$L$PQj \ÆD$ ëT$Ç QØ% Ét¾ÉBë¹0 3À_^][ÄÃUPD$<VPjSÿ× ÀtbL$@T$<j AÀ Òuö j è}ÿÿÄ ÀtPÇèÿÿÄÆ ÀuéÃÇ íu_^][Yà ÿ[ ÃVt$W|$VPQèºÿÿÿÄ ÀtVFPjRè¤ÿÿÿÄ ÀtÿFOVFPQRèÿÿÿÄ ÀtÿFOVFPQRènÿÿÿÄ_^ÃD$VW0xÎö04?ÁéñH×pÁêÑáÊ_H^ÃD$VWPHòùÁæÑéÎHÁçÑéÑêÏ_P^ÃD$ìSUVt$$3íW;Å¿N@ _^][ÄÃì`L$lSD$HUVD$W3À3ö3ÒùD$4ÇD$$ ù tù uEëæ¹ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ûÿÿL$xD$ À)¦ _^Ã][Ä`Ã=°ëÿÿ} ÇD$< D$D$D$ ÁS% |$HÆG-ë T$HúÆB T$8\$4f Éu Òu Ûufé W|$<3íl$ l$(fO l$,ñáÿ _^][Ä$Ãf;Íu(GC©ÿÿÿ\$u9ou9/ujj*_^][Ä$ÃD$,l$D$½ ÿD$.ëÿD$*fûÿrf÷ÞöJ#õ Æ L$0ÞBJfZ _^][Ä$Ãf÷Þö_æ ¿ B8ÙtÑÉtQ÷ ¿ÿþþ~Á÷3Ëðùñÿðÿ3Ï3ÆÂá ·MúÑÁêâPÑâáPHX^ÉÃUìQE S]eü SèK éÁ À9{DuP¤ ë&;¤ Ç Vè ètBWjë$ÿv4è; èt4Wjë$ÿv4èâ Nu¶ÁàA3Û9ÃA¶ Á_^3Â[ VÿUYjXëEFFÇMDIC33À_^[]ÃUìVu>MDICtjë FH9MvjXë(PÿuÿuÿuÿvèÞ ||øw}¹ +ÎÁ ANëtÇF E$éò ¯ ÿ¯ ¯¯@;ÁuÂÿ¯9 ¯u¯Nu¾ëf%¯ ¡¯£¯ÃfD$Vf£¯D$£¯D$£p¯D$3ö£¬¯5 ¯5t¯èC VèÏ hàè©þÿÿEü3Û+Ã4 h0§èòýÿÿEüðÁæÿ¶Øqè hP«è;üÿÿEüðÁæÿ¶HrèÞ h ¥èûÿÿEüÀ h£èûÿÿEü h hðèèùÿÿMüÿ°¯_^[ÉÃ%@ ú}øó¸èèèè¥f¥û]«f«E°È. Ú÷Û;ßwÖuÁÈ. °È. ÇÜ. ¶µ. f¼*ÿÿÿëf¼(ÿÿÿÑéf ÿ|Þ¿ÇEü¶DäPSèýÿÿ»¼. f *ÿÿÿëf (ÿÿÿÑéf À|޿ضDäPÿuèzüÿÿE϶ù$ ¿> ¿># ÿuVWèuýÿÿ_^] ¿> ÿEéG ¿¼º># Ø+ß#Z= ZÙ@ÿMü}ü ¿´²> ¿²># ÿuVWèàüÿÿ_^] ¿> ¿´²># ×£p= ×£ø?Zd;ßOnõ?ÃÓ,eâX·Ññ?Ð#GG¬Å§î?@¦¶il¯½7ë?3=¼BzåÕ¿Öç?ÂýýÎawÌ«ä?/L[áMľæÉ?ÄS;uD;¯?Þgº9E±Ï?$#Æâ¼º;1az?aUYÁ~±S|»_?×î/¾ ûD?$?¥é9¥'ê¨*?}¬¡ä¼d|FÐÝU>c{Ì#Twÿ=ú:zc%C1À¬<!Ñ8G¸ |