<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>InstallShield Tips and Techniques</title>
	<atom:link href="http://shieldmaster.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://shieldmaster.wordpress.com</link>
	<description>A Weblog to share tips and techniques for working with InstallShield's setup authoring engine.</description>
	<lastBuildDate>Tue, 16 Jun 2009 04:27:54 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='shieldmaster.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/62aa41ad26ade370bb67fbf7db09e9be?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>InstallShield Tips and Techniques</title>
		<link>http://shieldmaster.wordpress.com</link>
	</image>
			<item>
		<title>Altering setup.exe to embed customized icon</title>
		<link>http://shieldmaster.wordpress.com/2009/06/15/altering-setup-exe-to-embed-customized-icon/</link>
		<comments>http://shieldmaster.wordpress.com/2009/06/15/altering-setup-exe-to-embed-customized-icon/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 04:27:54 +0000</pubDate>
		<dc:creator>shieldmaster</dc:creator>
				<category><![CDATA[Reference Materials]]></category>

		<guid isPermaLink="false">http://shieldmaster.wordpress.com/?p=109</guid>
		<description><![CDATA[I have had quite a few requests to have a customer&#8217;s icon embedded in their setup program &#8211; and not use the default InstallShield one.  In the past I have poked around trying to see if there was an &#8220;Undocumented&#8221; method to do it and just simply gave up after spending a fruitless hour or [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=109&subd=shieldmaster&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I have had quite a few requests to have a customer&#8217;s icon embedded in their setup program &#8211; and not use the default InstallShield one.  In the past I have poked around trying to see if there was an &#8220;Undocumented&#8221; method to do it and just simply gave up after spending a fruitless hour or so.</p>
<p>This time, I was going to try again &#8211; it should not be so ridiciously hard! </p>
<p><strong>Damn I&#8217;m good!   </strong></p>
<p>After searching the forums, one post gave me a glimmer of hope &#8211; but not the method I wanted to employ.  The poster suggested that you take the final setup.exe and open in a Resource Editor and look at the Icon resource and there make your changes.  Well this means you need to alter the setup each time you generated an output file &#8211; that wastes my time, plus the setup.exe might be digitally signed &#8211; not a good solution.  But the germ of an idea was to alter the bootstrap setup.exe.</p>
<p>After searching, performing various test builds, I finally found a solution that works! </p>
<ol>
<li> Navigate to the directory “c:\Program Files\InstallShield\2009\Redist\Language Independent\i386&#8243;</li>
<li>Locate the two bootstrap files “setupPreReq.exe” and “setupPreReqW.exe”.  Make a copy of them to preserve in case you have problems.</li>
<li>Open each in a Resource Editor and look at the Icon resource.  In my method, I used Visual Studio 2005 and opend a file, selected the icons section, and  added a new Icon resource that a customer supplied (a 32 bit .ico file), which became Icon 101 – I had to then delete #100 (the InstallShield default one) and renamed my new Icon from 101 to be 100.  I then saved the modified SetupPreReq.Exe and made the same change to the other one.  Forgive the improper use of technical terms &#8211; I don&#8217;t program at all, I am relatively new to the VS IDE!</li>
<li>Rebuild the application media.  Now the new setup will display the customize icon.  This works for each and every build!</li>
</ol>
<p>Now I modified these two files for a project that has quite a few setup prerequisites &#8211; hence the ones that worked were named appropriately “setupPreReq.exe” and “setupPreReqW.exe”.  There were two other bootstrap setup&#8217;s, a &#8220;Setup.exe&#8221; and &#8220;SetupW.exe&#8221; but they did not work for my needs &#8211; but may be used if you don&#8217;t have setup prerequisites.  You may need to modify them as well.</p>
<p>For my needs, I will archive the original ones and use to create new customized ones for each customer.</p>
<p>Hope this helps!</p>
<p>Charles</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shieldmaster.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shieldmaster.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shieldmaster.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shieldmaster.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shieldmaster.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shieldmaster.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shieldmaster.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shieldmaster.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shieldmaster.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shieldmaster.wordpress.com/109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=109&subd=shieldmaster&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://shieldmaster.wordpress.com/2009/06/15/altering-setup-exe-to-embed-customized-icon/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b0e82125ce1be67ea9b361ec76533ca?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">shieldmaster</media:title>
		</media:content>
	</item>
		<item>
		<title>Tutorial: Adding Setup Prerequisites to InstallShield package</title>
		<link>http://shieldmaster.wordpress.com/2009/04/26/tutorial-adding-setup-prerequisites-to-installshield-package/</link>
		<comments>http://shieldmaster.wordpress.com/2009/04/26/tutorial-adding-setup-prerequisites-to-installshield-package/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 18:11:53 +0000</pubDate>
		<dc:creator>shieldmaster</dc:creator>
				<category><![CDATA[Reference Materials]]></category>

		<guid isPermaLink="false">http://shieldmaster.wordpress.com/?p=90</guid>
		<description><![CDATA[Recently I was working on a project and it required the Sage Data Objects to be installed for the application to work correctly.  Already packaged setups, I had to come up with a strategy to install them with my application package – built as a Basic MSI project.  After finding out the Sage packages were [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=90&subd=shieldmaster&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;">Recently I was working on a project and it required the Sage Data Objects to be installed for the application to work correctly.  Already packaged setups, I had to come up with a strategy to install them with my application package – built as a Basic MSI project.  After finding out the Sage packages were built as a InstallScript MSI package I knew they would collide unless I nested them (deprecated) or ran them as Immediate Custom Actions – which I detest because the client may cancel the install during the dialogs, but the Sage was forced on their workstations.</span></span> </p>
<p> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">Finally I decided to “repackage” them as Setup Prerequisites, so after completing this I decided to create a simple tutorial to guide others in this task.  Hope it helps!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><strong><em>Note:  All dialog screens are from InstallShield v2009.</em></strong></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p> </p>
<p> </p>
<p> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">First, look at the Redistributables selection – the middle panel shows you the final results of our created prerequisite.  In this case I had to create three (3) separate one, for each applicable version that was to be distributed.  Note the names are somewhat wordy – I initially used “SDObj15” but when it was installing, it was so cryptically it was unusable.  So write it out so the customer knows what is being installed. </span></p>
<p> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">The setup prerequisites will end up being stored in the sub-directory “SetupPrerequisites” under the location where InstallShield was installed.  In my case it’s “C:\Program Files\InstallShield\2009\SetupPrerequisites”.  They will be stored as PRQ files (my example would be “Sage Data Object Engine v15.prq”) – so be sure to stage them into your Source Repository afterwards before you misplace them!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">To get started, we need to open the Prerequisites Editor – accessible from the “Tool\Prerequisites Editor” dropdown menu choice.  You will be presented with this blank panel:</span></p>
<p> </p>
<p> </p>
<p> </p>
<p class="MsoNormal" style="margin:0;"> <img class="alignnone size-full wp-image-92" title="prereq1" src="http://shieldmaster.files.wordpress.com/2009/04/prereq1.jpg?w=596&#038;h=452" alt="prereq1" width="596" height="452" /></p>
<p> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">Go ahead and save this using your new name (example:  Sage Data Object Engine v15)</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">Now select the first tab “Properties” and let’s review:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-family:Arial;"><span style="font-size:small;">Prereq Properties</span></span></strong></p>
<p> </p>
<p> <span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><img class="alignnone size-full wp-image-96" title="prereq2" src="http://shieldmaster.files.wordpress.com/2009/04/prereq2.jpg?w=596&#038;h=452" alt="prereq2" width="596" height="452" /></span></span></p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">Note the pre-generated “unique identifier” that is associated with this Prereq – it’s used to stage the separate file in the Windows Temp directory during extraction and execution.<span>  </span>Preserve its value. <span>  </span>Add a description for clarity.<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">If the file is of considerable size, you may want to consider hosting the file on a website.<span>  </span>This will work if you are certain that every customer will be installing on a network connected workstation.<span>  </span>Remember there are some installations that are secure networks and are not allowed internet capability – this should be your guide as to where to host it or incorporate it within the setup.<span>  </span>An example of the web site would be <a href="http://www.installsolutionsinc.com/prereq">http://www.InstallSolutionsInc.com/prereq</a></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-family:Arial;"><span style="font-size:small;">Prereq Conditions</span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">The next tab is “Conditions” which we can modify to see what conditions this EXE will run under:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><span>        <span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><img class="alignnone size-full wp-image-97" title="prereq4" src="http://shieldmaster.files.wordpress.com/2009/04/prereq4.jpg?w=596&#038;h=452" alt="prereq4" width="596" height="452" /></span></span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">There is a condition that we want to occur before the prereq for Sage Data Object v13 needs to meet before we consider installing it.<span>  </span>Select the button Add to create the first condition.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><span>            </span><span>      </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> <span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><img class="alignnone size-full wp-image-98" title="prereq5" src="http://shieldmaster.files.wordpress.com/2009/04/prereq5.jpg?w=606&#038;h=550" alt="prereq5" width="606" height="550" /></span></span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">For this Prereq, I am looking for the existence of the file “sg50SdoEngine150.dll” that would have been installed into the Windows System32 file.<span>  </span>In addition I am checking that the version number is at least the one delivered with the EXE itself.<span>  </span>Obviously I would have to have installed the Sage setup to gather this information.<span>  </span>I just could have easily looked in the registry for the GUID under “HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall” and set to condition to install the Prereq if that registry did not exist.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">Remember you can chain the conditions together.<span>  </span>For example if I was installing the Microsoft Office 2007 Primary Interop Assembly to support a MS Word plug-in, I would want to check for both:</span></p>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Office 2007 was installed</span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Office 2007 Word was installed</span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Office 2007 Primary Interop Assembly was not installed</span></li>
</ul>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-family:Arial;"><span style="font-size:small;">Prereq “Files to Include”</span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">The next tab is the “Files to Include”, which allows us to lock down the files that are to be installed.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><img class="alignnone size-full wp-image-99" title="prereq6" src="http://shieldmaster.files.wordpress.com/2009/04/prereq6.jpg?w=596&#038;h=452" alt="prereq6" width="596" height="452" /></span></span>          </span></span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">Here, I include both the EXE and its associated Setup.ISS file – which is critical to run silently.<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><strong><span style="color:red;">Note that the files are hard-coded!<span>  </span>You must change it depending on where you stashed the EXE/ISS files.<span>  </span></span></strong></span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:10pt;color:black;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="color:#0000ff;"><span style="font-size:10pt;font-family:Arial;">To be honest I did not evaluate whether </span><span style="font-size:10pt;font-family:Arial;">It was possible to use a InstallShield path reference, such as &lt;ISProductFolder&gt; &#8211; but under the time constraints I did not evaluate that.<span>  </span>I remember that IS 12 finally allows a path reference for storing the setup after a build – quite a few releases after incorporating that technique. </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">Now the nice thing about the unique GUID Identifier we saw in the first panel, is that it segregates the files for this Prereq from other Prereq’s that are with the project.<span>  </span>In this situation, the ISS file is a silent parameter file used to provide dialog sequence for the InstallScript MSI Sage project.<span>  </span>Each Prereq that we will create (v13, v14 and v15) will have a similar named “Setup.ISS” – so we don’t have to worry about clashing the files.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-family:Arial;"><span style="font-size:small;">Prereq “Application to Run”</span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">The next tab “Application to run” allows me to point to the EXE with the simple “/s” parm to run it silently.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><span> </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> <span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><img class="alignnone size-full wp-image-100" title="prereq7" src="http://shieldmaster.files.wordpress.com/2009/04/prereq7.jpg?w=596&#038;h=452" alt="prereq7" width="596" height="452" /></span></span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">A simple drop down menu allows you to set the correct file amongst the files you included.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-family:Arial;"><span style="font-size:small;">Prereq “Behavior”</span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">The next tab “Behavior” offers some basic criteria on what to do if it requires reboot. </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><span>   <span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><img class="alignnone size-full wp-image-101" title="prereq8" src="http://shieldmaster.files.wordpress.com/2009/04/prereq8.jpg?w=596&#038;h=452" alt="prereq8" width="596" height="452" /></span></span>         </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">The available selections are geared towards supporting the “Chained MSI’s” capable with Windows Installer 4.5.<span>  </span>Since I know the Sage DO does not require a reboot, I was not worried about which I put here.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-family:Arial;"><span style="font-size:small;">Prereq “Dependencies”</span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">The final tab “Dependencies” allows you to have one run before the other.<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><img class="alignnone size-full wp-image-102" title="prereq9" src="http://shieldmaster.files.wordpress.com/2009/04/prereq9.jpg?w=596&#038;h=452" alt="prereq9" width="596" height="452" /></span></span>            </span></span></p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">In our case, we want this Prereq to run AFTER the “Sage Data Object v14.prq” – which itself will run after “Sage Data Object v13”! – Ok, we haven’t built those yet – so save this one, go build the other two and return to this panel to set the execution order!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-family:Arial;"><span style="font-size:small;">Final Edits </span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">Now that the setup prerequisites have been created, we need to go back and make some final edits to them.<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">Within the InstallShield project, you should be able to see your new prerequites listed in the Redistributables/Setup Prerequisites panel:</span></p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> <span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><img class="alignnone size-full wp-image-103" title="prereq10" src="http://shieldmaster.files.wordpress.com/2009/04/prereq10.jpg?w=1011&#038;h=580" alt="prereq10" width="1011" height="580" /></span></span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">1)<span>  </span>Select the checkbox on each one to inject it into the project.<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">2) Right-click each one and select properties.<span>  </span>Ensure each is set to &#8220;Extract from the Setup.exe&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><span>            </span><span>       </span></span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;">3)<span>  </span>Right-click and verify &#8220;set prerequisite order&#8221; &#8211; as shown here.<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><span>   <span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><img class="alignnone size-full wp-image-105" title="prereq12" src="http://shieldmaster.files.wordpress.com/2009/04/prereq12.jpg?w=504&#038;h=382" alt="prereq12" width="504" height="382" /></span></span>         </span><span>    </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:10pt;font-family:Arial;">Now, to my initial confusion, this panel seems to duplicate the Prereq “dependencies” we used earlier, that panel dealt only with sequencing the prerequisites – this one deals with the other non-related prerequisites. </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:10pt;font-family:Arial;">Make the Sage objects come after the .NET setup’s, and before the SQL Server (Not really important re: SQL Server since that one runs after the dialogs are selcted.)<span>  </span>Ensure that v14 follows v13 and v15 is the final one!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-size:10pt;font-family:Arial;">Final item</span></strong><span style="font-size:10pt;font-family:Arial;"> &#8211; go to the Releases panel and ensure that the element for your release media (7.00.0001/Release in the example) has &#8220;InstallShield Prerequisites Location&#8221; value set to either &#8220;Extract from Setup.exe&#8221; or &#8220;Follow individual selections&#8221;. </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"><span>       <span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><img class="alignnone size-full wp-image-95" title="prereq13" src="http://shieldmaster.files.wordpress.com/2009/04/prereq13.jpg?w=1016&#038;h=579" alt="prereq13" width="1016" height="579" /></span></span>     </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:10pt;font-family:Arial;">Otherwise, you will lose your religion trying to determine why the Sage EXE file are written to sub-dir under the Setup.exe file! :-&gt;}</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p class="MsoNormal" style="margin:0;"> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shieldmaster.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shieldmaster.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shieldmaster.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shieldmaster.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shieldmaster.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shieldmaster.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shieldmaster.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shieldmaster.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shieldmaster.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shieldmaster.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=90&subd=shieldmaster&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://shieldmaster.wordpress.com/2009/04/26/tutorial-adding-setup-prerequisites-to-installshield-package/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b0e82125ce1be67ea9b361ec76533ca?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">shieldmaster</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq1.jpg" medium="image">
			<media:title type="html">prereq1</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq2.jpg" medium="image">
			<media:title type="html">prereq2</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq4.jpg" medium="image">
			<media:title type="html">prereq4</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq5.jpg" medium="image">
			<media:title type="html">prereq5</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq6.jpg" medium="image">
			<media:title type="html">prereq6</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq7.jpg" medium="image">
			<media:title type="html">prereq7</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq8.jpg" medium="image">
			<media:title type="html">prereq8</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq9.jpg" medium="image">
			<media:title type="html">prereq9</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq10.jpg" medium="image">
			<media:title type="html">prereq10</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq12.jpg" medium="image">
			<media:title type="html">prereq12</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/04/prereq13.jpg" medium="image">
			<media:title type="html">prereq13</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows Installer – are we seeing a new strategic direction?</title>
		<link>http://shieldmaster.wordpress.com/2009/03/26/windows-installer-%e2%80%93-are-we-seeing-a-new-strategic-direction/</link>
		<comments>http://shieldmaster.wordpress.com/2009/03/26/windows-installer-%e2%80%93-are-we-seeing-a-new-strategic-direction/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 04:06:38 +0000</pubDate>
		<dc:creator>shieldmaster</dc:creator>
				<category><![CDATA[Reference Materials]]></category>
		<category><![CDATA[Techniques]]></category>

		<guid isPermaLink="false">http://shieldmaster.wordpress.com/?p=79</guid>
		<description><![CDATA[I have done my share of packages, ranging from the complex to the simple.  One thing is certain, sophisticated software packages using leading-edge technology is requiring a tremendous amount of application prerequisites to be installed.  
 
For example, for an 1 MB Excel “Plug-in” that I created the install package, the following software packages were required [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=79&subd=shieldmaster&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal" style="margin:0;"><span style="font-size:small;"><span style="font-family:Times New Roman;">I have done my share of packages, ranging from the complex to the simple.<span>  </span>One thing is certain, sophisticated software packages using leading-edge technology is requiring a tremendous amount of application prerequisites to be installed.<span>  </span></span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">For example, for an 1 MB Excel “Plug-in” that I created the install package, the following software packages were required to be installed before the application package (ignore the obvious Microsoft Office with Excel):</span></p>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Microsoft .NET 2.0</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Microsoft Visual Studio 2005 Tools for Office</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Microsoft Office 2003 Primary Interop Assemblies – for when Office 2003 is installed</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Microsoft Office 2007 Primary Interop Assemblies – for when Office 2007 is installed</span></li>
</ul>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;"><span style="font-family:Times New Roman;">All of these prerequisites packages must be installed before the application can be installed – in fact if they are not installed you will encounter errors during the configuration.<span>  </span></span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Just getting them deployed within the application install package has been frustrating because:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="text-indent:-.25in;margin:0 0 0 .5in;"><span style="font-family:Times New Roman;"><span><span style="font-size:small;">-</span><span style="font:7pt &quot;">         </span></span><span style="font-size:small;"><strong>Technique</strong> &#8211; correctly getting the technique in installing them<span>  </span>is very tricky to do when you have to have MS Office 2003 PIA look for its registry key (don’t attempt to run it if its already been install) and then look for the presence of Office 2003 registry key (it will error off if its prerequisite has not been installed)</span></span></p>
<p class="MsoNormal" style="text-indent:-.25in;margin:0 0 0 .5in;"><span style="font-family:Times New Roman;"><span><span style="font-size:small;">-</span><span style="font:7pt &quot;">         </span></span><span style="font-size:small;"><strong>Package size</strong> – start with a 1 MB Excel ‘plug-in’, and then add up the disk space consumed in incorporating these application prerequisites within your deliverable.<span>  </span>Over 50MB in this install package &#8211; for a 1MB Plug-in!<span>  </span>Web staging of these prerequisite packages becomes a mandatory requirement.</span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">In the past I would silently install some software packages (.NET 1.1 and Adobe) in the short period before the dialogs appeared (traditionally the Windows Installer engine is locked into your MSI and won’t let any other MSI packages execute).<span>  </span>Yes it violates the <strong><span style="color:#ff6600;">golden</span></strong> rule about not altering your client’s desktop until they gave permission by pressing INSTALL on the “Ready for Install” dialog – but many times you don’t have much choice.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">This growing requirement for application prerequisites force us to utilize the InstallShield “Setup Prerequisites” capability – which is steadily increased in usability until it now looks like its works in IS 2009!<span>  </span>Granted you can’t run silently/unattended since it will always pop up the Setup Prerequisites panel!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Lately I have been installing some high-end application packages and am finding a new trend – that of having a sophisticated “bootstrap” application to manage the installation, that is a C# type application that runs with panels to guide you through the installation process.<span>  </span>Consider the SQL Server 2005-8 or Visual Studio 2008 application dialog panel that steps you thru the various installation and configuration steps.<span>  </span>Look at Verint Systems with their Master Installer package – which handles prerequisites by neatly isolating them from the application installation package.<span>  </span>The MSI’s are launched separately which allows for the MSI Packages to be focused on just delivering the application files – not being concerned with prerequisites!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">These are vastly different approaches than that embodied within the “Chained MSI’s” approach that Windows Installer v4.5 is touting as the newest strategy – which is demonstrated within the .NET Framework 3.5 SP1.<span>  </span>This package actually is comprised of various MSI’s under the covers for the different .NET Framework versions (2.0, 2.0 SP1, 3.0, 3.5, 3.5 SP1) that are daisy chained together similar to early patches were cobbled together.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Personally I think very highly of Microsoft’s “Chained MSI’s” technique – but let’s be realistic – how many technology firms can dedicate resources to accomplish this and test it!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">The longer I stay in this business, the simpler I want to make my application packages.<span>  </span>Because when I develop them, I may not be maintaining them – the customer may have a individual with limited skill set trying to accomplish a simple maintenance task.<span>  </span>My stint with<span>  </span>EDS (back when 3 piece suits and lace-up florsheim’s were the norm!) taught me that for each dollar in development, an organization spends $100 in maintenance costs – so keep it simple!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">From my viewpoint – the technology to create the installation package is surpassing the expertise found in most development shops.<span>  </span>I think the approach that allows a InstallShield developer to create the most dependable “Bullet-proof” installation needs to be seriously considered!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;"><span style="font-family:Times New Roman;">The heretic has emerged!<span>  </span></span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-size:14pt;font-family:Castellar;">ShieldMaster</span></strong></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shieldmaster.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shieldmaster.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shieldmaster.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shieldmaster.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shieldmaster.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shieldmaster.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shieldmaster.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shieldmaster.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shieldmaster.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shieldmaster.wordpress.com/79/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=79&subd=shieldmaster&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://shieldmaster.wordpress.com/2009/03/26/windows-installer-%e2%80%93-are-we-seeing-a-new-strategic-direction/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b0e82125ce1be67ea9b361ec76533ca?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">shieldmaster</media:title>
		</media:content>
	</item>
		<item>
		<title>Testing your install to get consistent results</title>
		<link>http://shieldmaster.wordpress.com/2009/02/02/testing-your-install-to-get-consistent-results/</link>
		<comments>http://shieldmaster.wordpress.com/2009/02/02/testing-your-install-to-get-consistent-results/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 07:10:52 +0000</pubDate>
		<dc:creator>shieldmaster</dc:creator>
				<category><![CDATA[Reference Materials]]></category>
		<category><![CDATA[Techniques]]></category>

		<guid isPermaLink="false">http://shieldmaster.wordpress.com/?p=74</guid>
		<description><![CDATA[As a professional that is proud of my work, I ensure that each of my installs is thoroughly “Unit Tested” by me before they go to QA – after all, the install is not ready until it can do the basics:

Install cleanly on each approved Operating System – using Dialogs and running unattended/silently!
Uninstall cleanly on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=74&subd=shieldmaster&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">As a professional that is proud of my work, I ensure that each of my installs is thoroughly “Unit Tested” by me before they go to QA – after all, the install is not ready until it can do the basics:</span></p>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Install cleanly on each approved Operating System – using Dialogs and running unattended/silently!</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Uninstall cleanly on each approved Operating System</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">All registry entries properly configured based on dialog selection and input values</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">All files are installed – in the correct directories, based on Feature selection</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">All configurable files (XML, INI) are properly configured based on dialog selection and input values</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">All shortcuts are created and functionally work</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">All NT Services are created and started correctly.</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Any Web Services are created and configured correctly</span></li>
</ul>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Plus, realistically if it doesn’t perform the basics – what does the quality of my install package relay to the development team that is facing pressure to get their application in front of the testers – they don’t need doubts as to whether iteration #1 will be hung up with an installation that simply doesn’t install!</span></p>
<p class="MsoNormal" style="margin:0 0 0 .25in;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">But what about situations where the new install will be “upgrading” previous releases that are out in the field?<span>  </span>You have introduced a different set of testing criteria, such as:</span></p>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">All ‘approved’ previously released application versions are recognized – some versions may not be approved for upgrade, so they have to be recognized and dealt with appropriately</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">All ‘approved’ previously released application versions are upgraded to the new release.<span>  </span>This includes removing any trace of previous versions, removing obsolete files, preserving user configured files.</span></li>
</ul>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;"><span style="font-family:Times New Roman;">When I perform Unit Testing on my installation package, I seem to have a handle on the iterations that must be accomplished (test with this dialog selection on, test with it off), but I also found myself needing to be able to accomplish a test and be able to compare the results with a previous results set.<span>  </span></span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">What I needed was a consistent method to preserve the installed components for in-depth analysis.<span>  </span>I started out by having a check-list, such as:</span></p>
<p class="MsoNormal" style="text-indent:-.25in;margin:0 0 0 39pt;"><span style="font-family:Symbol;"><span><span style="font-size:small;">·</span><span style="font:7pt 'Times New Roman';">        </span></span></span><span style="font-size:small;font-family:Times New Roman;">Verify all registry entries &#8211; <span> </span>HKLM created </span></p>
<p class="MsoNormal" style="text-indent:-.25in;margin:0 0 0 39pt;"><span style="font-family:Symbol;"><span><span style="font-size:small;">·</span><span style="font:7pt 'Times New Roman';">        </span></span></span><span style="font-size:small;font-family:Times New Roman;">Verify all registry entries &#8211; HKCU created </span></p>
<p class="MsoNormal" style="text-indent:-.25in;margin:0 0 0 39pt;"><span style="font-family:Symbol;"><span><span style="font-size:small;">·</span><span style="font:7pt 'Times New Roman';">        </span></span></span><span style="font-size:small;font-family:Times New Roman;">Verify the AppPath entries are correctly created and configured</span></p>
<p class="MsoNormal" style="text-indent:-.25in;margin:0 0 0 39pt;"><span style="font-family:Symbol;"><span><span style="font-size:small;">·</span><span style="font:7pt 'Times New Roman';">        </span></span></span><span style="font-size:small;font-family:Times New Roman;">Verify the registry entries are correctly created and configured</span></p>
<p class="MsoNormal" style="text-indent:-.25in;margin:0 0 0 39pt;"><span style="font-family:Symbol;"><span><span style="font-size:small;">·</span><span style="font:7pt 'Times New Roman';">        </span></span></span><span style="font-size:small;font-family:Times New Roman;">Verify the services are created, started and configured as Automatic or Manual as required</span></p>
<p class="MsoNormal" style="text-indent:-.25in;margin:0 0 0 39pt;"><span style="font-family:Symbol;"><span><span style="font-size:small;">·</span><span style="font:7pt 'Times New Roman';">        </span></span></span><span style="font-size:small;font-family:Times New Roman;">Verify all of the files are installed based on the dialog choices/Feature selection – then copy the installed file to network for analysis – be sure to preserve the Time/Date stamp!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;"><span style="font-family:Times New Roman;">With this checklist, I could perform multiple installs on my list of Test cases, but whenever I missed gathering something, I had to go back and recreate the test scenario just to capture the data.<span>  </span></span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Plus, I was finding that some of the test Iterations could be given to QA and reviewed for their smoke testing – because I was not gathering the data for their analysis.</span></p>
<p class="MsoNormal" style="margin:0 0 0 .25in;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-size:14pt;"><span style="font-family:Times New Roman;">Batch Archive Method</span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">I found that I needed a method to easily gather the installed components for preservation.<span>  </span>I ended up creating a simple BATCH Archive job that would handle the data gathering consistently and would ensure that I did not miss anything!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Typically my testing is performed under VMware’s Workstation Server and I have an open connection to the domain network.<span>  </span>I created a BATCH job that would collect the data and copy it to a network location.<span>  </span>If you use ROBOCOPY (<span lang="EN">available as part of the <a title="Windows Resource Kit" href="http://en.wikipedia.org/wiki/Windows_Resource_Kit">Windows Resource Kit</a>, and introduced as a standard feature of <a title="Windows Vista" href="http://en.wikipedia.org/wiki/Windows_Vista">Windows Vista</a> and <a href="http://en.wikipedia.org/wiki/Windows_Server_2008" target="_blank">Windows Server 2008</a>.</span><span lang="EN"> </span>) you can easily copy the collected files and critically those installed directories &#8211; preserve the file attributes (Time/Date stamp).</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Here is a sample batch files I created, “<strong>Forensics_Archive.BAT</strong>” – you needed to pass it one parameter, the directory subset on the network shared that I created to hold the test results.<span>  </span>For example on </span><span style="font-size:small;font-family:Times New Roman;">\\DevShare\DevTesting\Charles\R7_Results</span><span style="font-size:small;font-family:Times New Roman;"> I would create various sub-directories (NewInstall; Upgrade; etc) using the Batch Archive.<span>  </span>For example, I could run the following:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;font-family:Times New Roman;">Forensics_Archive.bat “NewInstall\Iteration1_Dialogs”</span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;font-family:Times New Roman;">Forensics_Archive.bat “Upgrade\Iteration1_Dialogs”</span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;font-family:Times New Roman;">Forensics_Archive.bat “NewInstall\Iteration1_Silent”</span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Here is an extract of the batch file “Forensics_Archive.BAT”</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">@ECHO ON</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">IF [%1]==[/?] GOTO Syntax</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">IF [%1]==[] GOTO Syntax</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">SET ArchiveDest=%~1</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">SET ArchiveDestPath=%TEMP%\%ArchiveDest%</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">rmdir /S /Q %ArchiveDestPath%\</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">md %ArchiveDestPath%\</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO <strong>Archiving</strong> <strong>SOFTWARE Registry Entries from installation</strong></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">REGEDIT /E &#8220;%ArchiveDestPath%\</span><span style="font-size:small;font-family:Times New Roman;"> Forensics</span><span style="font-size:9pt;font-family:'Courier New';">.REG&#8221; &#8220;HKEY_LOCAL_MACHINE\SOFTWARE\Forensics&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">REGEDIT /E &#8220;%ArchiveDestPath%\ISI Systems.REG&#8221; &#8220;HKEY_LOCAL_MACHINE\SOFTWARE\ISI Systems&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">REGEDIT /E &#8220;%ArchiveDestPath%\Uninstall Entries.REG&#8221; &#8220;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">REGEDIT /E &#8220;%ArchiveDestPath%\HKCurrentUser_Forensics.REG&#8221; &#8220;HKEY_CURRENT_USER\SOFTWARE\Forensics&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO <strong>Archiving SERVICES Registry Entries from installation</strong></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">REGEDIT /E &#8220;%ArchiveDestPath%\DirectoryService.REG&#8221; </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">REGEDIT /E &#8220;%ArchiveDestPath%\Forensics Content Server.REG&#8221; &#8220;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Recorder Content Server&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">REGEDIT /E &#8220;%ArchiveDestPath%\RecorderTomcat.REG&#8221; &#8220;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RecorderTomcat&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO Archiving PROGRAMFILES Files from installation </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">XCOPY &#8220;c:\Program Files\ComPlus Applications&#8221; &#8220;%ArchiveDestPath%\Program </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">Files\ComPlus Applications&#8221; /C /E /I /R /Y</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">XCOPY &#8220;c:\Program Files\ISI Systems&#8221; &#8220;%ArchiveDestPath%\Program Files\ISI Systems&#8221; /C /E /I /R /Y</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO Archiving Files archived during Upgrade </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">XCOPY &#8220;C:\Documents and Settings\All Users\Application Data\ISI Systems\Archive&#8221; &#8220;%ArchiveDestPath%\Archived Files&#8221; /C /E /I /R /Y</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO <strong>Archiving Information on IIS Virtual Directory from installation </strong></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">cd c:\inetpub\AdminScripts</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">cscript.exe adsutil.vbs ENUM w3svc/1/root/Forensics &gt; IISVertDir_Forensics.txt</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">md &#8220;%ArchiveDestPath%\IIS_VirtDir&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">XCOPY &#8220;c:\inetpub\AdminScripts\IISVertDir*.txt&#8221; &#8220;%ArchiveDestPath%\IIS_VirtDir&#8221; /C /E /I /R /Y</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">del</span><span style="font-size:9pt;font-family:'Courier New';"> &#8220;c:\inetpub\AdminScripts\IISVertDir*.txt&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO Archiving %TEMP% Files from installation </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">XCOPY %TEMP%\*.log &#8220;%ArchiveDestPath%\TEMPDir&#8221; /C /I /R /Y</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO Archiving Migration Saved configuration files from installation </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">XCOPY &#8220;C:\Documents and Settings\All Users\Application Data\ISI Systems\Archive&#8221; &#8220;%ArchiveDestPath%\Migration Archived Files&#8221; /C /E /I /R /Y</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO Transferring Archived Files to localhost machine</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">NET USE \\DevShare\DevTesting\Charles\R7_Results /USER:DOMAIN\USERNAME PASSWORD <span> </span></span><strong><span style="font-size:10pt;color:red;font-family:Wingdings;"><span>ß</span></span></strong><strong><span style="font-size:10pt;color:red;"><span style="font-family:Times New Roman;"> Plug in your domain, user and password!</span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"><span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">\\DevShare\DevTesting\Charles\robocopy.exe %ArchiveDestPath% &#8220;\\DevShare\DevTesting\Charles\R7_Results\%ArchiveDest%&#8221; /MIR</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">NET USE \\DevShare\DevTesting\Charles\R7_Results /DEL</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">rmdir /S /Q %ArchiveDestPath%</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">:: Ready</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">GOTO End</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">:Syntax</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO Forensics_Archive.bat &#8211; batch utility to copy installation results off of VM Image to Host machine share<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO Usage:<span>  </span>Forensics_Archive &#8220;NewInstall\Iteration1_Dialogs&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.Note:<span>   </span>Cannot have spaces in the directory name!!!!!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO. Final results stored on</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO. \\DevShare\DevTesting\Charles\R7_Results\[Your Directory Name]</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ECHO Written by Charles B. Hodge</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">:: Clean up variables and quit</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';">:End</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;"><span style="font-family:Times New Roman;"> </span></span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-size:14pt;"><span style="font-family:Times New Roman;">Data Collection Comparison Method</span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">As noted in a early posting – I have an affinity for the file/directory comparison tool “</span><a href="http://www.scootersoftware.com/download.php" target="_blank"><span style="font-size:small;color:#800080;font-family:Times New Roman;">Beyond Compare</span></a><span style="font-size:small;font-family:Times New Roman;">”. <span>  </span>I have found that once I have gathered the data – I can simply compare one directory against another.<span>  </span>Very useful for comparing the known result set for an install with dialogs that I approved for TestCase #1 against the results set of a silent/unattended install that used the same selection criteria.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Hope this helps!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Charles</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shieldmaster.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shieldmaster.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shieldmaster.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shieldmaster.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shieldmaster.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shieldmaster.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shieldmaster.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shieldmaster.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shieldmaster.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shieldmaster.wordpress.com/74/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=74&subd=shieldmaster&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://shieldmaster.wordpress.com/2009/02/02/testing-your-install-to-get-consistent-results/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b0e82125ce1be67ea9b361ec76533ca?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">shieldmaster</media:title>
		</media:content>
	</item>
		<item>
		<title>Reading a Silent Install Parameter File</title>
		<link>http://shieldmaster.wordpress.com/2009/01/31/reading-a-silent-install-parameter-file/</link>
		<comments>http://shieldmaster.wordpress.com/2009/01/31/reading-a-silent-install-parameter-file/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 06:29:54 +0000</pubDate>
		<dc:creator>shieldmaster</dc:creator>
				<category><![CDATA[Reference Materials]]></category>

		<guid isPermaLink="false">http://shieldmaster.wordpress.com/?p=70</guid>
		<description><![CDATA[ 
I have been focusing quite a bit on silent installs lately.  In fact I have recently rewritten two installs that were giving problems to the customer base simply because they could not be installed silently &#8211; or unattended.
 
In my experience, quite a few corporations require that software be able to be installed in an unattended/silent [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=70&subd=shieldmaster&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">I have been focusing quite a bit on silent installs lately.<span>  </span>In fact I have recently rewritten two installs that were giving problems to the customer base simply because they could not be installed silently &#8211; or unattended.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">In my experience, quite a few corporations require that software be able to be installed in an unattended/silent method.  For example, when a large corporation with 20,000 customer support personnel wants to distribute new software to their desktops, they use a high-end software distribution program (SMS, Trivoli) that will push the application install to the desktops during the night, launch the install package and reboot the machine.  No user intervention is required, and typically the user may not have administrative privileges so the application install package needs to be able to run both unattended and with elevated administrative privileges.<br />
 <br />
Smaller organizations may simply stage the application install program on a network share and provide every customer support personnel a link to a batch file (.BAT) that will run the application, supplying all of the options and data input without requiring user intervention.  All the user would do would be to click on the link before departing the office.  </span></p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">I know the vast majority of installs are very simple and when you create a batch file, about the only item you will need is to pass the INSTALLDIR parameter.<span>  </span>But what happens when you have 6 to 8 dialogs, each with multiple data fields.<span>  </span>Here is an example of the MSI Properties I needed to pass to an application install to run silently with the correct configuration:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">INSTALLDIR=\&#8221;C:\Program Files\ISI Systems\&#8221; </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_PLATFORM_GROUP=1 </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_CS_COMPONENT_AS=1 </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_CS_COMPONENT_CM=1 </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_CS_COMPONENT_SM=1 </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_CS_COMPONENT_AD=1 </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_CS_TOPOLOGY_GROUP=1 </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_AUDITDB_SERVER=DEVSERVER </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_AUDITDB_NAME=MSSQLSERVER </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_HTTP_SERVERNAME=ISI_SERVER</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_HTTP_SERVERPORT=80 </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><span style="font-size:9pt;font-family:'Courier New';">ISI_HTTP_SERVERPATH=haven/services/content.asp</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:9pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;"><span style="font-family:Times New Roman;">It looks nice lined up and very easy to read, but <strong>unfortunately the MSI Command line parameters must be on one contiguous input line</strong> – you cannot break these input parameters across two or more lines.<span>  Now i</span></span></span><span style="font-size:small;font-family:Times New Roman;">mage how difficult it will be to explain the information clearly to a customer who is attempting to create a silent install BATCH file.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">I remember years back how very much in vogue the INI type files were for reading in program data.<span>  </span>Now everything is XML format, which is not quite as easy for the customer to manipulate.<span>  </span>Started me thinking…</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;"><span style="font-family:Times New Roman;">I ended up playing around with a silent parameter file – using a INI file format.<span>  </span>I wanted to keep the MSI Command line as simple as possible.<span>  </span>The goal is to create a BATCH file, such as “SilentInstall.bat”, but just specify a MSI Property, such as: “SILENT_PARAMETER_FILE” which provides the path and file name of the special INI file that would contain all of the application configuration items.<span>  </span></span></span><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p><span style="font-size:12pt;font-family:'Times New Roman';"><br />
</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Examples of the contents of a <span> </span>BATCH file “<strong>SilentInstall.BAT</strong>”, would be:</span></p>
<p class="MsoNormal" style="margin:0;"><span><span style="font-size:small;font-family:Times New Roman;"> </span></span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><strong><span style="font-size:10pt;font-family:'Courier New';">&#8220;c:\Install\Setup.exe&#8221; /s /v&#8221;/qb </span></strong><strong><span style="font-size:10pt;color:red;font-family:Wingdings;"><span>ß</span></span></strong><strong><span style="font-size:10pt;color:red;font-family:'Courier New';"> Line break for clarity only</span></strong><strong></strong></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><strong><span style="font-size:10pt;font-family:'Courier New';">SILENT_PARAMETER_FILE=C:\Install\SilentParms.INI REBOOT=ReallySuppress</span></strong></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-size:10pt;font-family:'Courier New';"> </span></strong></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><strong><span style="font-size:10pt;font-family:'Courier New';">Msiexec /I c:\Install\AppSetup.msi /qb </span></strong><strong><span style="font-size:10pt;color:red;font-family:Wingdings;"><span>ß</span></span></strong><strong><span style="font-size:10pt;color:red;font-family:'Courier New';"> Line break for clarity only</span></strong><strong></strong></p>
<p class="MsoNormal" style="padding-left:30px;margin:0;"><strong><span style="font-size:10pt;font-family:'Courier New';">SILENT_PARAMETER_FILE=C:\Install\SilentParms.INI REBOOT=ReallySuppress</span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Now the contents of the SilentParms.INI file would contain the application information that would normally be filled in the dialog data element fields.<span>  </span>Use comments to ensure clarity, especially if you are informing the customer of the relationships between selection values.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Here is a sample <strong>SilentParms.INI</strong> file:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>   </span>Silent Parm File for running application Packrat</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-size:10pt;font-family:'Courier New';">[GLOBAL]</span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">InstallDirectory=&#8221;c:\Program Files\ISI Systems&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-size:10pt;font-family:'Courier New';">[PLATFORM_GROUP]</span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Activate only one Platform &#8211; choices are:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>   </span>Platform=Rotunda</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>   </span>Platform=Balance</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>   </span>Platform=Beam</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">Platform=Rotunda<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-size:10pt;font-family:'Courier New';">[ROTUNDA]</span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Choose as many Components for the Rotunda selection </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** required</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Note: values are not used if Platform selected was not </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** <span>      </span>ROTUNDA</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">AudioServer=Yes</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">CacheMonitor=Yes</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">SearchMonitor=No</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">Auditing=NO</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Choose Web or Viewer Services for the Rotunda selection.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Choices are:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>CS_Services=Web</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>CS_Services=Viewer</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Note: values are not used if Platform selected was not </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** <span>      </span>ROTUNDA</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">CS_Services=Viewer</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Provide data for the Rotunda HTTP Services selection.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Choices for Viewer Services:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>HTTP_SERVERNAME=CHARLES1</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>HTTP_SERVERPORT=80</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>HTTP_SERVERPATH=witness/services/content.asp</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Choices for WEB Services:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>HTTP_SERVERNAME=CHARLES1</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>HTTP_SERVERPORT=8080</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>HTTP_SERVERPATH=adapter/locator</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Note: values are not used if Platform selected was not </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** <span>      </span>ROTUNDA</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">HTTP_SERVERNAME=CHARLES1</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">HTTP_SERVERPORT=80</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">HTTP_SERVERPATH=witness/services/content.asp</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Provide data for the Rotunda Auditing selection.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Choices are:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>AUDITDB_SERVER=CHARLES1</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>AUDITDB_NAME=CHARLES2</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Note: values are not used if Platform selected was not </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** <span>      </span>ROTUNDA</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">AUDITDB_SERVER=CHARLES1</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">AUDITDB_NAME=CHARLES2</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-size:10pt;font-family:'Courier New';">[BALANCE_SERVICES]</span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Choose Web or COM Services for the Balance selection.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Choices are:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>Balance_Services=WEB</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM **<span>    </span>Balance_Services=COM</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ** Note: value is not used if Platform selected was not BALANCE</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">REM ****************************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">Bal_Services=WEB</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Personally the INI style format is just cleaner to look at, and should be much easier to document – especially when you can put comments throughout the document.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<h3 class="MsoNormal" style="margin:0;"><span style="font-size:small;"><span style="font-family:Times New Roman;">InstallScript Custom Action</span></span></h3>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Now here is a sample InstallScript that will read the INI file and create the selected values to MSI Properties.<span>  </span>Couple of things to note:</span></p>
<ol style="margin-top:0;" type="1">
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Since you typically will run silently, the Custom Action must be run both in the UI Sequence as well as the Execute Sequence.<span>  Obviously the majority of time the appliation will be running silently and only in the Execute Sequence.  But also t</span>hink of the INI file used as a method to prefill data elements if QA decides to run with dialogs for evaluation requirements.<span>  </span>That is why you need to enable it to run in both sequences &#8211; but only allow it to run once!</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">The conversion of the INI values into MSI Properties should precisely deliver the same installation configuration.<span>  </span>This is a good method to test – run the install silently with the MSI Properties, and then run with the INI file.<span>  </span>The results should match up correctly.</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">If a file and path are entered via the MSI Property “</span><span style="font-size:10pt;font-family:'Courier New';">SILENT_PARAMETER_FILE”</span><span style="font-size:small;font-family:Times New Roman;">, and the file cannot be found, then trigger an abort.</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">When the Script contains a INSTALLDIR parm, you need to create a Type 35 Custom Action and use the property value “</span><span style="font-size:10pt;font-family:'Courier New';">ISI_INSTALLPATH” </span><span style="font-size:small;font-family:Times New Roman;">(Set in the script) to set the INSTALLDIR directory property.</span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Be sure to allow for the path entered to be in UNC form &#8211; could be a remote location!<span>  </span></span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">To shorten the Script – <span style="color:#ff0000;"><strong><em>I have excised the redundant script code</em></strong></span>.</span></li>
</ol>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">/////////////////////////////////////////////////////////////////////////</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">// Function:<span>  </span>ISI_ReadSilentParms</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//<span>                                                                           </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//<span>  </span>Purpose:<span>  </span>This function will be called by the script engine when </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//<span>            </span>Windows(TM) Installer executes your custom action </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//<span>            </span>and will read and validate the Silent run parms</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">///////////////////////////////////////////////////////////////////////function ISI_ReadSilentParms(hMSI)<span>           </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span><span>     </span>STRING<span>   </span>szProgramFolder, szCommandLine, szItemName, szMigration;<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span><span>     </span>STRING<span>   </span>szPath, szRegKey, szRegSubKey, szSupportDir;</span></p>
<p class="MsoNormal" style="text-indent:.5in;margin:0;"><span style="font-size:10pt;font-family:'Courier New';">STRING<span>   </span>szProgramFiles, szBuffer, szLogMessage, szParmFile;</span></p>
<p class="MsoNormal" style="text-indent:.5in;margin:0;"><span style="font-size:10pt;font-family:'Courier New';">STRING<span>   </span>szINI_SectionName, szINI_ValueName;<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span><span>     </span>STRING<span>   </span>szPlatform, szAudioServer, szCacheMonitor;</span></p>
<p class="MsoNormal" style="text-indent:.5in;margin:0;"><span style="font-size:10pt;font-family:'Courier New';">STRING<span>   </span>szSearchMonitor;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span><span>     </span>STRING<span>   </span>szAuditing, szCS_Services, szBalance_Services;</span></p>
<p class="MsoNormal" style="text-indent:.5in;margin:0;"><span style="font-size:10pt;font-family:'Courier New';">STRING<span>   </span>szAuditDB, szAuditDB_Server;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span><span>     </span>STRING<span>   </span>szAuditDB_Name, szCS_ServerName, szCS_ServerPort;</span></p>
<p class="MsoNormal" style="text-indent:.5in;margin:0;"><span style="font-size:10pt;font-family:'Courier New';">STRING<span>   </span>szCS_ServerPath;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span><span>     </span>NUMBER<span>   </span>nBuffer, nResult, nvType, nvSize;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">begin<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//WriteToLogFiles</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">ISI_WriteLogFile (&#8220;ISI&#8211;&gt; Entering ISI_ReadSilentParms Function&#8221;);<span>    </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//***********************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//** Retrieve MSI Property that tells where </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//** the silent parm file is located</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//***********************************************<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>nBuffer = 256;</span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">MsiGetProperty (ISMSI_HANDLE, &#8220;SILENT_PARAMETER_FILE&#8221;, szParmFile, nBuffer); </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">if (nBuffer = 0) then</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Retrieved no value from the MSI Property &#8216;SILENT_PARAMETER_FILE&#8217;!&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>Sprintf (szLogMessage, szBuffer, szParmFile);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>ISI_WriteLogFile (szLogMessage); </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>goto BypassSilentParmFileRead;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">szBuffer = &#8220;ISI&#8211;&gt; INFO: Retrieved &#8216;%s&#8217; value from the MSI Property &#8216;SILENT_PARAMETER_FILE&#8217; &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">Sprintf (szLogMessage, szBuffer, szParmFile);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">ISI_WriteLogFile (szLogMessage);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">LongPathToShortPath (szParmFile);<span>                                 </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">LongPathToQuote ( szParmFile, TRUE );</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">if ( Is (FILE_EXISTS, szParmFile) = FALSE) then<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>szBuffer = &#8220;ISI&#8211;&gt; ERROR: File &#8216;%s&#8217; was not found – </span></p>
<p class="MsoNormal" style="text-indent:.5in;margin:0 0 0 1in;"><span style="font-size:10pt;font-family:'Courier New';">cancelling install! &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>Sprintf (szLogMessage, szBuffer, szParmFile);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>ISI_WriteLogFile (szLogMessage);<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>return ERROR_INSTALL_FAILURE;<span>   </span>//Breaks out of install and aborts</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>szINI_SectionName =<span>    </span>&#8220;GLOBAL&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>szINI_ValueName<span>   </span>=<span>    </span>&#8220;InstallDirectory&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>nResult = GetProfString ( szParmFile, szINI_SectionName, szINI_ValueName, g_szInstallDir ); </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>if (nResult = 0) then</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Value retrieved from Section &#8216;%s&#8217; with name &#8216;%s&#8217;! was &#8216;%s&#8217; &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>Sprintf (szLogMessage, szBuffer, szINI_SectionName, szINI_ValueName, g_szInstallDir);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>ISI_WriteLogFile (szLogMessage);<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>else</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>szBuffer = &#8220;ISI&#8211;&gt; ERROR: Value could not be retrieved from Section &#8216;%s&#8217; with name &#8216;%s&#8217;! &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>Sprintf (szLogMessage, szBuffer, szINI_SectionName, szINI_ValueName);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>ISI_WriteLogFile (szLogMessage);<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>// Set MSI Property which will reset INSTALLDIR Property for new files being installed</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>MsiSetProperty (ISMSI_HANDLE, &#8220;ISI_INSTALLPATH&#8221;, g_szInstallDir);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Set ISI_INSTALLPATH Directory to be: &#8216;%s&#8217; &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>Sprintf (szLogMessage, szBuffer, g_szInstallDir);<span>    </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>ISI_WriteLogFile (szLogMessage);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">// ********************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">// ** Retrieve the Platform value</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">// ********************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">szINI_SectionName =<span>    </span>&#8220;PLATFORM_GROUP&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">szINI_ValueName<span>   </span>=<span>    </span>&#8220;Platform&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">nResult = GetProfString ( szParmFile, szINI_SectionName, szINI_ValueName, szPlatform ); </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">if (nResult = 0) then</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Value retrieved from Section &#8216;%s&#8217; with name &#8216;%s&#8217;! was &#8216;%s&#8217; &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>Sprintf (szLogMessage, szBuffer, szINI_SectionName, szINI_ValueName, szPlatform);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>ISI_WriteLogFile (szLogMessage);<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>nResult = StrCompare ( &#8220;Rotunda&#8221;, szPlatform );<span>  </span>//Case insensitive comparison</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>if (nResult = 0) then</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>MsiSetProperty (ISMSI_HANDLE, &#8220;ISI_PLATFORM_GROUP&#8221;, &#8220;1&#8243;);<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Set MSI Property &#8216;%s&#8217; with value of 1 &#8211; set as Rotunda&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>Sprintf (szLogMessage, szBuffer, &#8220;ISI_PLATFORM_GROUP&#8221;);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>ISI_WriteLogFile (szLogMessage);<span>     </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>goto BypassPlatformRead;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>nResult = StrCompare ( &#8220;Balance&#8221;, szPlatform );<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>if (nResult = 0) then</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>MsiSetProperty (ISMSI_HANDLE, &#8220;ISI_PLATFORM_GROUP&#8221;, &#8220;2&#8243;);<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Set MSI Property &#8216;%s&#8217; with value of 2 &#8211; set as Balance&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>Sprintf (szLogMessage, szBuffer, &#8220;ISI_PLATFORM_GROUP&#8221;);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>ISI_WriteLogFile (szLogMessage);<span>     </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>goto BypassPlatformRead;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>nResult = StrCompare ( &#8220;Ultra&#8221;, szPlatform );<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>if (nResult = 0) then</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>MsiSetProperty (ISMSI_HANDLE, &#8220;ISI_PLATFORM_GROUP&#8221;, &#8220;3&#8243;);<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Set MSI Property &#8216;%s&#8217; with value of 3 &#8211; set as Ultra&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>Sprintf (szLogMessage, szBuffer, &#8220;ISI_PLATFORM_GROUP&#8221;);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>ISI_WriteLogFile (szLogMessage);<span>     </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>goto BypassPlatformRead;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>//PROBLEM DID NOT FIND MATCHING VALUE!!!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>szBuffer = &#8220;ISI&#8211;&gt; ERROR: Value could not be retrieved from Section &#8216;%s&#8217; with name &#8216;%s&#8217;! &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>Sprintf (szLogMessage, szBuffer, szINI_SectionName, szINI_ValueName);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>ISI_WriteLogFile (szLogMessage);<span>    </span><span>    </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>MsiSetProperty (ISMSI_HANDLE, &#8220;ISI_PLATFORM_GROUP&#8221;, &#8220;1&#8243;);<span>  </span>//Setting Default!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">else</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>szBuffer = &#8220;ISI&#8211;&gt; ERROR: Value could not be retrieved from Section &#8216;%s&#8217; with name &#8216;%s&#8217;! &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>Sprintf (szLogMessage, szBuffer, szINI_SectionName, szINI_ValueName);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>ISI_WriteLogFile (szLogMessage);<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>MsiSetProperty (ISMSI_HANDLE, &#8220;ISI_PLATFORM_GROUP&#8221;, &#8220;1&#8243;);<span>  </span>//Setting Default!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">BypassPlatformRead:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">// ********************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">// ** Retrieve the ROTUNDA Components value</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">// ********************************************************<span>     </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">szINI_SectionName =<span>    </span>&#8220;ROTUNDA&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>szINI_ValueName<span>   </span>=<span>    </span>&#8220;AudioServer&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>nResult = GetProfString ( szParmFile, szINI_SectionName, szINI_ValueName, szAudioServer ); </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>if (nResult = 0) then</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Value retrieved from Section &#8216;%s&#8217; with name &#8216;%s&#8217;! was &#8216;%s&#8217; &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>Sprintf (szLogMessage, szBuffer, szINI_SectionName, szINI_ValueName, szAudioServer);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>ISI_WriteLogFile (szLogMessage);<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>else</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>szBuffer = &#8220;ISI&#8211;&gt; ERROR: Value could not be retrieved from Section &#8216;%s&#8217; with name &#8216;%s&#8217;! &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>Sprintf (szLogMessage, szBuffer, szINI_SectionName, szINI_ValueName);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>ISI_WriteLogFile (szLogMessage);<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>nResult = StrCompare ( &#8220;Yes&#8221;, szAudioServer );<span>  </span>//Case insensitive comparison</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>if (nResult = 0) then</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>MsiSetProperty (ISMSI_HANDLE, &#8220;ISI_CS_COMPONENT_AS&#8221;, &#8220;1&#8243;);<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Set MSI Property &#8216;ISI_CS_COMPONENT_AS&#8217; with value of 1&#8243;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>Sprintf (szLogMessage, szBuffer, &#8220;ISI_CS_COMPONENT_AS&#8221;);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>ISI_WriteLogFile (szLogMessage);<span>     </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>else</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>MsiSetProperty (ISMSI_HANDLE, &#8220;ISI_CS_COMPONENT_AS&#8221;, &#8220;&#8221;);<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Set MSI Property &#8216;ISI_CS_COMPONENT_AS&#8217; with value of 0&#8243;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>Sprintf (szLogMessage, szBuffer, &#8220;ISI_CS_COMPONENT_AS&#8221;);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>ISI_WriteLogFile (szLogMessage);<span>     </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">// ********************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">// ** Retrieve the ROTUNDA Services values</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">// ********************************************************</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">szINI_ValueName<span>   </span>=<span>    </span>&#8220;CS_Services&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">nResult = GetProfString ( szParmFile, szINI_SectionName, szINI_ValueName, szCS_Services ); </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">if (nResult = 0) then</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Value retrieved from Section &#8216;%s&#8217; with name &#8216;%s&#8217;! was &#8216;%s&#8217; &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>Sprintf (szLogMessage, szBuffer, szINI_SectionName, szINI_ValueName, szCS_Services);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>ISI_WriteLogFile (szLogMessage); </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>nResult = StrCompare ( &#8220;Viewer&#8221;, szCS_Services );<span>  </span>//Case insensitive comparison</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>if (nResult = 0) then</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>MsiSetProperty (ISMSI_HANDLE, &#8220;ISI_CS_TOPOLOGY_GROUP&#8221;, &#8220;1&#8243;);<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Set MSI Property &#8216;ISI_CS_TOPOLOGY_GROUP&#8217; with value of 1 &#8211; Viewer&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>Sprintf (szLogMessage, szBuffer, &#8220;ISI_CS_TOPOLOGY_GROUP&#8221;);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>ISI_WriteLogFile (szLogMessage);<span>     </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>else</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>MsiSetProperty (ISMSI_HANDLE, &#8220;ISI_CS_TOPOLOGY_GROUP&#8221;, &#8220;2&#8243;);<span>  </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>szBuffer = &#8220;ISI&#8211;&gt; INFO: Set MSI Property &#8216;ISI_CS_TOPOLOGY_GROUP&#8217; with value of 2 &#8211; WEB&#8221;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>Sprintf (szLogMessage, szBuffer, &#8220;ISI_CS_TOPOLOGY_GROUP&#8221;);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>                  </span>ISI_WriteLogFile (szLogMessage);<span>     </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>            </span>endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">else</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>szBuffer = &#8220;ISI&#8211;&gt; ERROR: Value could not be retrieved from Section &#8216;%s&#8217; with name &#8216;%s&#8217;! &#8220;;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>Sprintf (szLogMessage, szBuffer, szINI_SectionName, szINI_ValueName);</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>      </span>ISI_WriteLogFile (szLogMessage);<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">endif;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">//WriteToLogFiles<span>   </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span>BypassSilentParmFileRead:</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">ISI_WriteLogFile (&#8220;ISI&#8211;&gt; Exiting ISI_ReadSilentParms Function&#8221;);<span>    </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';">end;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Hope this helps!<span>  </span>Happy Coding…</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Charles</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shieldmaster.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shieldmaster.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shieldmaster.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shieldmaster.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shieldmaster.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shieldmaster.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shieldmaster.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shieldmaster.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shieldmaster.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shieldmaster.wordpress.com/70/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=70&subd=shieldmaster&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://shieldmaster.wordpress.com/2009/01/31/reading-a-silent-install-parameter-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b0e82125ce1be67ea9b361ec76533ca?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">shieldmaster</media:title>
		</media:content>
	</item>
		<item>
		<title>Conditionally install features via scripting</title>
		<link>http://shieldmaster.wordpress.com/2009/01/16/conditionally-install-features-via-scripting/</link>
		<comments>http://shieldmaster.wordpress.com/2009/01/16/conditionally-install-features-via-scripting/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 00:08:41 +0000</pubDate>
		<dc:creator>shieldmaster</dc:creator>
				<category><![CDATA[InstallShield Scripting]]></category>

		<guid isPermaLink="false">http://shieldmaster.wordpress.com/?p=63</guid>
		<description><![CDATA[ 
 
 
I was recently dealing with an application install and wanted to selectively activate some features via scripting.  Turns out the application had three platforms and one of the platforms had four separate options. The typical method was to use the Custom Setup, but I wanted more flexibility.
 
Here was the situation, I created two screens that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=63&subd=shieldmaster&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">I was recently dealing with an application install and wanted to selectively activate some features via scripting.<span>  </span>Turns out the application had three platforms and one of the platforms had four separate options. The typical method was to use the Custom Setup, but I wanted more flexibility.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Here was the situation, I created two screens that the user would be able to choose selections; the first was a Platform screen, </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><img class="alignnone size-full wp-image-64" title="vision1" src="http://shieldmaster.files.wordpress.com/2009/01/vision1.jpg?w=504&#038;h=386" alt="vision1" width="504" height="386" /></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">And then if Balance was chosen then they could pick components (one, none or all) from the four that were available.</span></p>
<p class="MsoNormal" style="margin:0;"><img class="alignnone size-full wp-image-65" title="vision2" src="http://shieldmaster.files.wordpress.com/2009/01/vision2.jpg?w=504&#038;h=386" alt="vision2" width="504" height="386" /></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">What I wanted to achieve was to have InstallShield features created for the following:</span></p>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span style="font-size:small;"><span style="font-family:Times New Roman;"><strong>CommonFiles</strong> – this contains all common files needed by application, regardless of the platform chosen</span></span></li>
<li class="MsoNormal"><span style="font-size:small;"><span style="font-family:Times New Roman;"><strong>Stability</strong> – these files would be delivered if customer selected Stability as a platform </span></span></li>
<li class="MsoNormal"><span style="font-size:small;"><span style="font-family:Times New Roman;"><strong>Balance</strong> – this was some core files for Vision that would be required when the platform Balance was selected. </span></span></li>
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Optionally, when the these specific components for Balance are selected:</span>
<ul style="margin-top:0;" type="circle">
<li class="MsoNormal"><span style="font-size:small;"><span style="font-family:Times New Roman;"><strong>Balance_Client</strong> – these files within this feature would be selected if the user checked the box “Client for Balance”</span></span></li>
<li class="MsoNormal"><span style="font-size:small;"><span style="font-family:Times New Roman;"><strong>Balance_CacheMonitor</strong> &#8211; these files within this feature would be selected if the user checked the box “Cache Monitor”</span></span></li>
<li class="MsoNormal"><span style="font-size:small;"><span style="font-family:Times New Roman;"><strong>Balance_SearchMonitor</strong> &#8211; these files within this feature would be selected if the user checked the box “Search Monitor”</span></span></li>
<li class="MsoNormal"><span style="font-size:small;"><span style="font-family:Times New Roman;"><strong>Balance_AuditMonitor</strong> &#8211; these files within this feature would be selected if the user checked the box “Auditing”</span></span></li>
</ul>
</li>
<li class="MsoNormal"><span style="font-size:small;"><span style="font-family:Times New Roman;"><strong>Viewer</strong> – these files would be delivered if customer selected Viewer as a platform</span></span></li>
</ul>
<p class="MsoNormal" style="margin:0 0 0 .75in;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="color:red;"><span style="font-size:small;"><span style="font-family:Times New Roman;">With those dialogs and the features created, and components and files populated, how could I selectively activate the features based on user selection? </span></span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Here is how I accomplished it:</span></p>
<ol style="margin-top:0;" type="1">
<li class="MsoNormal"><span style="font-size:small;"><span style="font-family:Times New Roman;">On each feature that I wanted conditionally set, I first set the InstallLevel value to be 300 – which prevents the feature from being installed (assuming default INSTALLLEVEL property value of 100).<span>  </span></span></span></li>
</ol>
<p class="MsoNormal" style="margin:0;"><span><span style="font-size:small;font-family:Times New Roman;">        </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<ol style="margin-top:0;" type="1">
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">You will need to create a script that runs after the dialogs have been displayed and the user makes the selection.<span>  </span>Here is a snippet that I created:</span></li>
</ol>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">// ******************************************************</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">// ** Obtain the value of the MSI Property associated </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">// ** with the Audit Checkbox</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">// ******************************************************</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">nBuffer = 256;<span>    </span></span></p>
<p class="MsoNormal" style="padding-left:30px;text-indent:.25in;margin:0;"><span style="font-size:10pt;font-family:'Courier New';">MsiGetProperty (ISMSI_HANDLE, &#8220;VER_BAL_COMPONENT_AU&#8221;, </span></p>
<p class="MsoNormal" style="padding-left:30px;text-indent:.25in;margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span>               </span>szCS_Component_AU, nBuffer); </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">szBuffer = &#8220;ver&#8211;&gt; Retrieved &#8216;%s&#8217; value from the MSI Property “ +</span></p>
<p class="MsoNormal" style="padding-left:30px;text-indent:.5in;margin:0 0 0 1in;"><span style="font-size:10pt;font-family:'Courier New';">“VER_BAL_COMPONENT_AU &#8216; &#8220;;</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">Sprintf (szLogMessage, szBuffer, szCS_Component_AU);</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">ver_WriteLogFile (szLogMessage);</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">// ******************************************************</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">// ** If checkbox was checked, then set the corresponding</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">// ** MSI Property to be an ACTIVE switch</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">// ******************************************************</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">if (szCS_Component_AU <span> </span>= &#8220;1&#8243;) then</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';"><span>   </span>MsiSetProperty (ISMSI_HANDLE, &#8220;AUDIT_SWITCH&#8221;, &#8220;ACTIVE&#8221;);</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';"><span>   </span>szBuffer = &#8220;ver&#8211;&gt; Set &#8216;%s&#8217; as value for the MSI Property “ +</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';"><span>               </span>“&#8217;AUDIT_SWITCH&#8217; &#8220;;</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';"><span>   </span>Sprintf (szLogMessage, szBuffer, &#8220;ACTIVE&#8221;);</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';"><span>   </span>ver_WriteLogFile (szLogMessage);</span></p>
<p class="MsoNormal" style="padding-left:30px;margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';">endif;<span>   </span></span></p>
<p class="MsoNormal" style="margin:0 0 0 .25in;"><span style="font-size:10pt;font-family:'Courier New';"><span>   </span></span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;font-family:Times New Roman;">I pulled the value of the MSI Property associated with the Balance Component “Auditing”.<span>  </span>If the value was “1” – then the user had checked the “Audit” box. All I had to do was then set the MSI Property “AUDIT_SWITCH” to have a value of “ACTIVE”.</span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;"><span style="font-family:Times New Roman;">Now this script is run by a Custom Action that is set to run after the dialogs have completed in the UI Sequence.<span>  </span>But because the UI Sequence does not run when executing silently – you need to have the Custom Action set to “Run Only Once” and have the CA also run in the Execute Sequence.<span>  </span></span></span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<ol style="margin-top:0;" type="1">
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Finally, I created some Custom Actions that will set the MSI Property “ADDLOCAL” which is the property that lets the Windows Installer know what features are being installed.<span>  </span>These will be Type 51 – “New Set Property” and will only run in the Execute Sequence.<span>  </span>I will initialize the MSI Property “ADDLOCAL” with the features that are always required and then build the string, adding more features as necessary.<span>  </span>Here are some sample Custom Actions:</span>
<ol style="margin-top:0;" type="a">
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Custom Action Name:<span>  </span>ISI_SetBaseFeatures</span></li>
</ol>
</li>
</ol>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                               </span><span style="font-family:Times New Roman;"><span style="font-size:small;">i.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Property Name: ADDLOCAL</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                             </span><span style="font-family:Times New Roman;"><span style="font-size:small;">ii.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Property Value:<span>  </span>CommonFiles</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                            </span><span style="font-family:Times New Roman;"><span style="font-size:small;">iii.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Execution Scheduling: Always Execute</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                           </span><span style="font-family:Times New Roman;"><span style="font-size:small;">iv.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Install Exec Sequence:<span>  </span>Schedule after AppSearch</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                             </span><span style="font-family:Times New Roman;"><span style="font-size:small;">v.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Install Exec Condition:<span>  </span>NOT Installed</span></p>
<ol style="margin-top:0;" type="1">
<li> 
<ol style="margin-top:0;" type="a">
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Custom Action Name:<span>  </span>ISI_SetBalance </span></li>
</ol>
</li>
</ol>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                               </span><span style="font-family:Times New Roman;"><span style="font-size:small;">i.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Property Name: ADDLOCAL</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                             </span><span style="font-family:Times New Roman;"><span style="font-size:small;">ii.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Property Value:<span>  </span>[ADDLOCAL],Balance</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                            </span><span style="font-family:Times New Roman;"><span style="font-size:small;">iii.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Execution Scheduling: Always Execute</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                           </span><span style="font-family:Times New Roman;"><span style="font-size:small;">iv.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Install Exec Sequence:<span>  </span>Schedule after ISI_SetBaseFeatures</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                             </span><span style="font-family:Times New Roman;"><span style="font-size:small;">v.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Install Exec Condition:<span>  </span>BALANCE_SWITCH=&#8221;ACTIVE&#8221;</span></p>
<ol style="margin-top:0;" type="1">
<li> 
<ol style="margin-top:0;" type="a">
<li class="MsoNormal"><span style="font-size:small;font-family:Times New Roman;">Custom Action Name:<span>  </span>ISI_SetAuditing </span></li>
</ol>
</li>
</ol>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                               </span><span style="font-family:Times New Roman;"><span style="font-size:small;">i.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Property Name: ADDLOCAL</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                             </span><span style="font-family:Times New Roman;"><span style="font-size:small;">ii.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Property Value:<span>  </span>[ADDLOCAL],Balance_AuditMonitor</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                            </span><span style="font-family:Times New Roman;"><span style="font-size:small;">iii.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Execution Scheduling: Always Execute</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                           </span><span style="font-family:Times New Roman;"><span style="font-size:small;">iv.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Install Exec Sequence:<span>  </span>Schedule after ISI_SetBalance</span></p>
<p class="MsoNormal" style="text-indent:-1.5in;margin:0 0 0 1.5in;"><span><span style="font:7pt 'Times New Roman';">                                                             </span><span style="font-family:Times New Roman;"><span style="font-size:small;">v.</span><span style="font:7pt 'Times New Roman';">      </span></span></span><span style="font-size:small;font-family:Times New Roman;">Install Exec Condition:<span>  </span>AUDIT_SWITCH=&#8221;ACTIVE&#8221;</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;"><span style="font-family:Times New Roman;">Basically, I took the MSI Property “ADDLOCAL” and initialized it to the features that I considered mandatory – in this case the feature “CommonFiles”.<span>   </span></span></span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;"><span style="font-family:Times New Roman;">From this point on, each Custom Action would append another feature to the MSI Property when the condition was met.<span>  </span></span></span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0 0 0 .5in;"><span style="font-size:small;font-family:Times New Roman;">In the above examples, if the user chose the checkbox in the dialog “Auditing”, then after the script ran the MSI Property “AUDIT_SWITCH” was set to “ACTIVE”.<span>  </span>That triggers the condition in Custom Action “ISI_SetAuditing” so that the feature name “Balance_AuditMonitor” will be appended to the MSI Property “ADDLOCAL” <strong>(Note: the use of apostrophe in the value!). </strong><span> </span>Another feature has been activated.</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Hope this sheds some light on how to make InstallShield work for you!</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shieldmaster.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shieldmaster.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shieldmaster.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shieldmaster.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shieldmaster.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shieldmaster.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shieldmaster.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shieldmaster.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shieldmaster.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shieldmaster.wordpress.com/63/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=63&subd=shieldmaster&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://shieldmaster.wordpress.com/2009/01/16/conditionally-install-features-via-scripting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b0e82125ce1be67ea9b361ec76533ca?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">shieldmaster</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/01/vision1.jpg" medium="image">
			<media:title type="html">vision1</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/01/vision2.jpg" medium="image">
			<media:title type="html">vision2</media:title>
		</media:content>
	</item>
		<item>
		<title>Taking the complexity out of reading a WI log file</title>
		<link>http://shieldmaster.wordpress.com/2009/01/13/50/</link>
		<comments>http://shieldmaster.wordpress.com/2009/01/13/50/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 06:12:45 +0000</pubDate>
		<dc:creator>shieldmaster</dc:creator>
				<category><![CDATA[Reference Materials]]></category>

		<guid isPermaLink="false">http://shieldmaster.wordpress.com/?p=50</guid>
		<description><![CDATA[Taking the complexity out of reading a Windows installer Verbose log file
 
Recently a fellow MSI consultant - Mike Snodgrass of Snodgrass Engineering, (http://snodgrassengineering.com) sent me the “WiLogUtil” the MSI Log utility from the Windows SDK.  A great tool in helping to taking the complexity out of reading a very obscure log file.  Being a non-Code developer, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=50&subd=shieldmaster&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal" style="margin:0;"><strong><span style="font-size:small;"><span style="font-family:Times New Roman;">Taking the complexity out of reading a Windows installer Verbose log file</span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Recently a fellow MSI consultant - Mike Snodgrass of Snodgrass Engineering, (</span><a href="http://snodgrassengineering.com/"><span style="font-size:small;color:#800080;font-family:Times New Roman;">http://snodgrassengineering.com</span></a><span style="font-size:small;font-family:Times New Roman;">) sent me the “WiLogUtil” the MSI Log utility from the Windows SDK.<span>  </span>A great tool in helping to taking the complexity out of reading a very obscure log file.<span>  </span>Being a non-Code developer, I rarely take the time to scope out the SDK offerings – so thanks Chris!</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">I have been dissecting MSI Log files for quite a while, using them to debug if and when my Custom Actions fired and what the results were.<span>  </span>(<span style="color:red;">Hint:<span>  </span>use a unique name prefix such as “<strong>ISI_</strong>CustomActionName” to both differentiate and allow you to find your Custom Actions easily</span>).</span></p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"><img class="alignnone size-full wp-image-55" title="wilogutil_ui1" src="http://shieldmaster.files.wordpress.com/2009/01/wilogutil_ui1.jpg?w=669&#038;h=549" alt="wilogutil_ui1" width="669" height="549" /></span></p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">The Analyze feature offers some good insight into the various client/server States with an excellent MSI Properties snapshot capability. </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;"><span style="font-family:Times New Roman;"><strong>The selling feature in the MSI Log utility</strong> is the button “HTML Log” which will convert the log into color coded sections.<span>  </span>The legend is in the top menu – makes evaluation easier if you are new to the MSI Logs. </span></span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> <img class="alignnone size-full wp-image-58" title="wilogutil" src="http://shieldmaster.files.wordpress.com/2009/01/wilogutil.jpg?w=1024&#038;h=819" alt="wilogutil" width="1024" height="819" /></span></p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><strong><span style="font-size:small;"><span style="font-family:Times New Roman;">Link</span></span></strong></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">Here is a link within the MSDN site to the resource </span><a href="http://msdn.microsoft.com/en-us/library/aa372811.aspx"><span style="font-size:small;color:#800080;font-family:Times New Roman;">http://msdn.microsoft.com/en-us/library/aa372811.aspx</span></a><span style="font-size:small;font-family:Times New Roman;"> &#8211; it allows you to reference directly the correct Windows Installer SDK.</span></p>
<p><span style="font-size:12pt;font-family:&quot;"><br />
</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;">There is a nice – but compact topic to reading the Log file available from the button</span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:small;font-family:Times New Roman;"> </span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shieldmaster.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shieldmaster.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shieldmaster.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shieldmaster.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shieldmaster.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shieldmaster.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shieldmaster.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shieldmaster.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shieldmaster.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shieldmaster.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=50&subd=shieldmaster&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://shieldmaster.wordpress.com/2009/01/13/50/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b0e82125ce1be67ea9b361ec76533ca?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">shieldmaster</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/01/wilogutil_ui1.jpg" medium="image">
			<media:title type="html">wilogutil_ui1</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2009/01/wilogutil.jpg" medium="image">
			<media:title type="html">wilogutil</media:title>
		</media:content>
	</item>
		<item>
		<title>What a ride!</title>
		<link>http://shieldmaster.wordpress.com/2009/01/07/what-a-ride/</link>
		<comments>http://shieldmaster.wordpress.com/2009/01/07/what-a-ride/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 05:48:51 +0000</pubDate>
		<dc:creator>shieldmaster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shieldmaster.wordpress.com/?p=46</guid>
		<description><![CDATA[Yes it has been quite a while since I last posted on the Blog - amazing to think that it was over a year ago. 
I started a new consulting opportunity in Roswell, GA.  They were in need of a InstallShield specialist to handle some problems with a IS v6.3 Object installation.  I took on the challenge and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=46&subd=shieldmaster&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Yes it has been quite a while since I last posted on the Blog - amazing to think that it was over a year ago. </p>
<p>I started a new consulting opportunity in Roswell, GA.  They were in need of a InstallShield specialist to handle some problems with a IS v6.3 Object installation.  I took on the challenge and spent the next six months literally up to my ears in the installation &#8211; resolving problems they had with it.  I was able to slow down in early March &#8211; since I had pretty much had to give up golf when I took this job. </p>
<p>Then my son&#8217;s wife delivered twins prematurely &#8211; almost two months! Now I never realized the focus on these two little babies (he was 4.5 lbs, she was 3.5 lbs) &#8211; feeding every 3 hours around the clock!  My wife and I took to spending the nights there separately and taking the overnight feedings as well as helping over the weekends.  We were pretty much exhausted as well.  Did not seem to let up for 5 months! </p>
<p>Then the consulting opportunity ended when I was offered a full time position &#8211; which I was very honored to take.  I immediately was &#8220;drowned&#8221; in opportunity when I took on the challenge to rebuild the original installation using a newer Installshield &#8211; but convert to a Basic MSI project with InstallShield Custom Actions.  Over 35,000 lines of scripting and 27 InstallShield Objects to review and rebuild.  Again I became heads down with little time for anything else (no golf, no blogging, no life&#8230;).  Just work and babysitting babies (still a lot of fun &#8211; I can challenge anyone to a diapering contest!)</p>
<p>Now I still haven&#8217;t played a round of golf since October 2007, but I have a beautiful 25 month old granddaughter and her 8 month old baby sister and brother. So it has been a good trade-off. </p>
<p>I will be including some pictures of them periodically.  When I started this blog, I wanted to keep it professional &#8211; just discuss InstallShield topics.  I will venture out of the area occasionally as time and opportunity permits.  Life has taken different directions!</p>
<p>Cheers!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shieldmaster.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shieldmaster.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shieldmaster.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shieldmaster.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shieldmaster.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shieldmaster.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shieldmaster.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shieldmaster.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shieldmaster.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shieldmaster.wordpress.com/46/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=46&subd=shieldmaster&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://shieldmaster.wordpress.com/2009/01/07/what-a-ride/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b0e82125ce1be67ea9b361ec76533ca?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">shieldmaster</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing to PALM Devices using InstallShield MSI</title>
		<link>http://shieldmaster.wordpress.com/2007/08/15/installing-to-palm-devices-using-installshield-msi/</link>
		<comments>http://shieldmaster.wordpress.com/2007/08/15/installing-to-palm-devices-using-installshield-msi/#comments</comments>
		<pubDate>Thu, 16 Aug 2007 04:27:45 +0000</pubDate>
		<dc:creator>shieldmaster</dc:creator>
				<category><![CDATA[Palm Device]]></category>
		<category><![CDATA[Techniques]]></category>

		<guid isPermaLink="false">http://shieldmaster.wordpress.com/2007/08/15/installing-to-palm-devices-using-installshield-msi/</guid>
		<description><![CDATA[I started a project to create a Basic MSI installation to deliver some client files on a workstation. Not a problem, but the kicker was that in addition, I needed to install a PALM .PRC to a PALM user, and then install a Conduit.
I spent dozens of hours researching this topic, using the Google message [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=40&subd=shieldmaster&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://shieldmaster.files.wordpress.com/2007/08/palm-listbox.jpg" title="palm-listbox.jpg"></a>I started a project to create a Basic MSI installation to deliver some client files on a workstation. Not a problem, but the kicker was that in addition, I needed to install a PALM .PRC to a PALM user, and then install a Conduit.</p>
<p>I spent dozens of hours researching this topic, using the Google message boards, and the PALM reference documentation. I have finally succeeded in accomplishing all of my objectives. The final objective was to put out on the Blog what needed to be done. Well here it is!</p>
<p>Note: I created a Basic MSI project using InstallShield X.5 with Custom Actions created using InstallScript &#8211; but all the steps could have been done in an earlier/later version, or an InstallScript version. In fact you will note that in one aspect using InstallScript may have been the better choice.</p>
<p><strong>Step 1: Before User dialogs are presented</strong></p>
<p>Determine if PALM Desktop is loaded – cancel install if not present</p>
<p>This Custom Action should be run before any Dialogs are presented; run CondMgr.dll with the function:</p>
<p>nError = CmGetHotSyncExecPath (szPath, p_nvSize);</p>
<p>RC = 0 means PALM Desktop was found and valid path returned, (along with HOTSYNC.exe appended&#8230;)</p>
<p>Parse the szPath to obtain just the path:</p>
<p>ParsePath ( gPALMHotSyncPath, szPath, PATH );</p>
<p>Note: Carry these DLLs in your SupportArea. For the first C.A., use the CondMgr.dll that you carry to determine the HotSync path. From that point on, always attempt to load the DLL from the HotSync path, if it fails, then use the one in your SupportArea.</p>
<p>The path is where the HotSync binaries will be found, and can be used in APP PATH registry to create a path to the HS Binaries for your application. All further UseDLL commands should attempt to use the DLL within this path first.</p>
<p>Note: Run C.A. as Immediate Action, but ensure C.A. is run at least once in either the UI or Execute sequence because install might be run silently and then dialogs won’t be presented.</p>
<p><strong>Step 2: During or just before Dialogs are presented</strong></p>
<p>If you have a .PRC file that needs to be installed to the PALM Desktop for synchronization to the PDA, you need to create Custom Actions that will:</p>
<p>Retrieve all users defined to PALM Desktop<br />
Reject any Profiles<br />
Create STRINGLIST or write temporary records to MSI database ListBox</p>
<p>This Custom Action will be running InstAide.dll to retrieve the users; unfortunately it doesn’t distinguish between PALM users or profiles.</p>
<p>To get the users defined to the PALM Desktop, first you need to obtain the total users:<br />
nNumUsers = PltGetUserCount ();</p>
<p>The value in nNumUsers will be a total count of Users and Profiles defined. Create a loop to retrieve each user using a counter from 0 to (nNumUsers -1). For example, if nNumUsers = 12, the first counter will be 0, the final counter value will be 11.</p>
<p>nzUserNameSize = PltGetUser (nCounter, szUserName, p_nvSize);</p>
<p>Each call to the function PltGetUser will return the User/Profile name defined. Now you need to call the function PltIsUserProfile with the user name to determine whether it is a User name versus a Profile.<br />
nResult = PltIsUserProfile(szUserName);</p>
<p>if (nResult = 0) then this user is a defined “User”</p>
<p>Once you have the PALM users, you have two options available with a MSI Basic* install.</p>
<p>First, you can create a STRINGLIST of all PALM Users and install the PRC file to all of the Users. This might be an option for when you may be running a Silent installation, where the user running the installation doesn’t have the ability to choose one user.</p>
<p>ListGetFirstString (gListUsers, svSelectedUser);<br />
while (nResult != END_OF_LIST)<br />
nError = PltInstallFile (svSelectedUser, szPLogAppFilePath);<br />
if (nError = 0) then<br />
….<br />
else<br />
szMsg = &#8220;ERROR! PALM HotSync would not install %s!\n&#8221; +<br />
&#8220;Attempt to install this file for the selected User: %s &#8221; +<br />
“failed.\n\nPlease manually install this application onto the PDA&#8221;;<br />
MessageBox (szMsg, WARNING);<br />
endif;<br />
ListGetNextString (gListUsers, svSelectedUser);<br />
endwhile;</p>
<p>Second, you write each user to the LISTBOX table, using a temporary entry to the MSI database. These entries will then appear in the Dialog LISTBOX screen for the user to choose one entry. After the Dialogs have completed, you can retrieve the selected user from the property associated with the LISTBOX and install the PRC file to this user.</p>
<p>////////////////////////////////////////////////////////////////////////////////<br />
// This script populates the LISTALLPALMUSERS control in the ISI_ListBox<br />
// dialog with the current values from the STRINGLIST gListUsers<br />
// The end user&#8217;s selection for the ListBox is stored in LISTALLPALMUSERS<br />
//<br />
////////////////////////////////////////////////////////////////////////////////</p>
<p>// open view into ListBox table<br />
MsiDatabaseOpenView(ISMSI_HANDLE,<br />
&#8220;SELECT * FROM `ListBox` WHERE `Property`=&#8217;LISTALLPALMUSERS&#8217;&#8221;,<br />
hViewlist);<br />
MsiViewExecute(hViewlist, NULL);</p>
<p>r = 0;</p>
<p>// Get the first string in the list.<br />
nResult = ListGetFirstString (gListUsers, szUserName);</p>
<p>// Loop while list items continue to be retrieved.<br />
while (nResult != END_OF_LIST)</p>
<p>nBuffer = 256; // set size buffer<br />
MsiRecordGetString(hRecordprop, 1, szUserName, nBuffer);<br />
nBuffer = 256; // reset size buffer<br />
//MsiGetProperty(ISMSI_HANDLE, svPropname, svPropvalue, nBuffer);<br />
r = r + 1;<br />
hRecordlist = MsiCreateRecord(4);</p>
<p>MsiRecordSetString(hRecordlist, 1, &#8220;LISTALLPALMUSERS&#8221;);<br />
MsiRecordSetInteger(hRecordlist, 2, r);<br />
MsiRecordSetString(hRecordlist, 3, szUserName);<br />
MsiRecordSetString(hRecordlist, 4, szUserName);</p>
<p>// can only temporarily modify running .msi database<br />
MsiViewModify(hViewlist, MSIMODIFY_INSERT_TEMPORARY, hRecordlist);<br />
// Get the next string in the list.<br />
nResult = ListGetNextString (gListUsers, szUserName);<br />
endwhile;</p>
<p>MsiViewClose(hViewlist);<br />
MsiViewClose(hViewprop);</p>
<p>Note: Run C.A. as Immediate Action, but ensure C.A. is run at least once in either the UI or Execute sequence because install might be run silently and then dialogs won’t be presented.</p>
<p><a href="http://shieldmaster.files.wordpress.com/2007/08/palm-listbox.jpg" title="palm-listbox.jpg"><img src="http://shieldmaster.files.wordpress.com/2007/08/palm-listbox.jpg" alt="palm-listbox.jpg" /></a></p>
<p>* MSI Basic – the ListBox has a severe Windows Installer limitation in that you can only select one entry from the ListBox. The Standard InstallScript project’s ListBox will allow multiple selections to be made&#8230; If this is critical it should be your guidance as to whether to create the project using InstallScript over Basic MSI.</p>
<p><strong>Step 3: Install PRC file</strong></p>
<p>Obtain PALM user selected for PRC Installation<br />
Install PRC to selected PALM user using the InstAide.Dll</p>
<p>nError = PltInstallFile (svSelectedUser, szAppFilePath);</p>
<p><strong>Step 4: Install Conduit file</strong></p>
<p>• Install a Conduit (if required) using CondMgr.dll</p>
<p>nResult = CmInstallCreator( szConduitName, nzConduit_Application);</p>
<p>nResult = CmSetCreatorName( szConduitName, szConduitFileName);</p>
<p>There may be other items to be required to install the Conduit – determine what they are and pass them by the developers just in case…</p>
<p>Issue a restart to HotSync for it to recognize the installed PRC using HSAPI.dll</p>
<p>nError = HsSetAppStatus (HSRESTART, HSFLAG_NONE);</p>
<p>Note: Run C.A. as Deferred Action</p>
<p><strong>Step 5: Uninstall Process</strong></p>
<p>Remove the Conduit (if required) using CondMgr.dll</p>
<p>nResult = CmRemoveConduitByCreatorID( szConduitName);</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shieldmaster.wordpress.com/40/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shieldmaster.wordpress.com/40/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shieldmaster.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shieldmaster.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shieldmaster.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shieldmaster.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shieldmaster.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shieldmaster.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shieldmaster.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shieldmaster.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shieldmaster.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shieldmaster.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=40&subd=shieldmaster&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://shieldmaster.wordpress.com/2007/08/15/installing-to-palm-devices-using-installshield-msi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b0e82125ce1be67ea9b361ec76533ca?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">shieldmaster</media:title>
		</media:content>

		<media:content url="http://shieldmaster.files.wordpress.com/2007/08/palm-listbox.jpg" medium="image">
			<media:title type="html">palm-listbox.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>MSI Tip:  Writing to a MSI Log file from InstallScript Custom Action</title>
		<link>http://shieldmaster.wordpress.com/2007/07/16/msi-tip-writing-to-a-msi-log-file-from-installscript-custom-action/</link>
		<comments>http://shieldmaster.wordpress.com/2007/07/16/msi-tip-writing-to-a-msi-log-file-from-installscript-custom-action/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 03:44:01 +0000</pubDate>
		<dc:creator>shieldmaster</dc:creator>
				<category><![CDATA[Reference Materials]]></category>

		<guid isPermaLink="false">http://shieldmaster.wordpress.com/2007/07/16/msi-tip-writing-to-a-msi-log-file-from-installscript-custom-action/</guid>
		<description><![CDATA[Much has been written about logging to the MSI log, including new requirements levied by Windows Vista &#8211; custom actions should write startup and shutdown information.
InstallShield has created a TIP topic &#8220;MSI Tip: Writing to the Log File from a Custom Action&#8221; and discussed various methods available.
I have been using the MSI log for diagnostic [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=39&subd=shieldmaster&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Much has been written about logging to the MSI log, including new requirements levied by Windows Vista &#8211; custom actions should write startup and shutdown information.</p>
<p>InstallShield has created a TIP topic &#8220;<strong><a target="_blank" href="http://www.macrovision.com/products/installation/installshield.htm" title="InstallShield Tips">MSI Tip: Writing to the Log File from a Custom Action</a></strong>&#8221; and discussed various methods available.</p>
<p>I have been using the MSI log for diagnostic analysis since DevStudio v9 &#8211; granted it has a complex structure, but with practice comes an easier ability to delve in the log to solve install issues. </p>
<p><strong>But what if many times, analysis could be done with a simpler install log?</strong>  I have found that the majority of problems can easily be identified if you log critical information into an install log, which is always created when your install kicks off.  Many times when your install is running onsite, they don&#8217;t have MSI Logging activated (see previous posting) &#8211; so a valuable technical tool has been lost. </p>
<p>Even more valuable to the InstallShield Specialist is the ability to review an install log and verify that each Custom Action performed as expected &#8211; even if the install was successful you could have scripting errors that miss conditions critical to success.</p>
<p><strong>Sample Install Log Output</strong></p>
<p><font color="#0000ff">ISI&#8211;&gt; ***************************************************************<br />
ISI&#8211;&gt; ** LogFile Created by ABC Skeleton Package Install<br />
ISI&#8211;&gt; ** LogFile Created on 6-23-2007 at 12:59:43<br />
ISI&#8211;&gt; ***************************************************************<br />
ISI&#8211;&gt; INFO: Entering ISI_Fn_AppSearch Function<br />
ISI&#8211;&gt; ABC AppSearch &#8211; Must find the ABC &#8216;ABC_Skeleton&#8217; application<br />
with registry key file of &#8216;Motorola\ABC_Skeleton&#8217;<br />
ISI&#8211;&gt; ABC AppSearch &#8211; Found the ABC &#8216;ABC_Skeleton&#8217; application with<br />
registry key file of &#8216;Motorola\ABC_Skeleton&#8217;<br />
ISI&#8211;&gt; INFO: Entering ISI_Fn_SkeletonPreReq Function</font></p>
<p><font color="#0000ff">ISI&#8211;&gt; INFO: Entering ISI_Fn_CheckWin2003Svr Function<br />
ISI&#8211;&gt; Operating System is Windows 2003 Server Service pack installed<br />
was &#8216;1&#8242; which is approved!<br />
ISI&#8211;&gt; PASSED &#8211; Windows 2003 Server SP1 (or greater) was found! Passed Windows 2003 Server Check!<br />
ISI&#8211;&gt; INFO: Exiting ISI_Fn_CheckWin2003Svr Function</font></p>
<p><font color="#0000ff">ISI&#8211;&gt; INFO: Entering ISI_Fn_Verify_WSE_Installed Function<br />
ISI&#8211;&gt; Microsoft WSE &#8216;Microsoft.Web.Services3.dll&#8217; will be searched in<br />
directory or sub-directories<br />
&#8216;C:\Program Files\Microsoft WSE\v3.0&#8242;.<br />
ISI&#8211;&gt; PASSED &#8211; Microsoft WSE version 3.0.5305.0 was found installed! ISI&#8211;&gt; INFO: Exiting ISI_Fn_Verify_WSE_Installed</font></p>
<p><font color="#0000ff">ISI&#8211;&gt; INFO: Entering ISI_Fn_RegToGAC Function<br />
ISI&#8211;&gt; INFO: Retrieved value of InstallDir, which was<br />
&#8216;C:\Program Files\Motorola\CSR\&#8217; from registry using key of<br />
&#8216;SOFTWARE\Motorola\CSR_Framework&#8217;<br />
ISI&#8211;&gt; ERROR: Bad return code: &#8216;2&#8242; from GAC Registration of file: &#8216;&#8221;C:\Program Files\ABC\CSR\ABC.Skeleton.Ajax.dll&#8221;&#8216;<br />
ISI&#8211;&gt; ERROR: Bad return code: &#8216;2&#8242; from GAC Registration of file: &#8216;&#8221;C:\Program Files\ABC\CSR\ABC.Skeleton.WebSpider.dll&#8221;&#8216;<br />
ISI&#8211;&gt; ERROR: Bad return code: &#8216;2&#8242; from GAC Registration of file: &#8216;&#8221;C:\Program Files\ABC\CSR\ABC.Skeleton.WSE.dll&#8221;&#8216;<br />
ISI&#8211;&gt; INFO: Exiting ISI_Fn_RegToGAC Function<br />
</font></p>
<p><strong></strong></p>
<p><strong></strong></p>
<p><strong>For Extra Credit!  </strong></p>
<p>When you create the log entry for the Install Log, you can also trigger an entry into the MSI Log using the ‘SprintfMsiLog&#8217; command.  That way the log comments are found in both locations!</p>
<p>Hope this helps!</p>
<p>Charles</p>
<p>p.s. if anyone wants some sample script that accomplishes this, please send an email to <a href="mailto:charles@installsolutionsinc.com">charles@installsolutionsinc.com</a> and I will markup some script for you use!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shieldmaster.wordpress.com/39/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shieldmaster.wordpress.com/39/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shieldmaster.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shieldmaster.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shieldmaster.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shieldmaster.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shieldmaster.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shieldmaster.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shieldmaster.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shieldmaster.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shieldmaster.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shieldmaster.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=shieldmaster.wordpress.com&blog=1238642&post=39&subd=shieldmaster&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://shieldmaster.wordpress.com/2007/07/16/msi-tip-writing-to-a-msi-log-file-from-installscript-custom-action/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b0e82125ce1be67ea9b361ec76533ca?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">shieldmaster</media:title>
		</media:content>
	</item>
	</channel>
</rss>