<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Jack Fei&#039;s Blog</title>
	<atom:link href="http://jackfei.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jackfei.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Fri, 16 Jul 2010 16:19:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jackfei.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Jack Fei&#039;s Blog</title>
		<link>http://jackfei.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jackfei.wordpress.com/osd.xml" title="Jack Fei&#039;s Blog" />
	<atom:link rel='hub' href='http://jackfei.wordpress.com/?pushpress=hub'/>
		<item>
		<title>No More Capture MSIs</title>
		<link>http://jackfei.wordpress.com/2010/07/16/no-more-capture-msis/</link>
		<comments>http://jackfei.wordpress.com/2010/07/16/no-more-capture-msis/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 16:16:47 +0000</pubDate>
		<dc:creator>qz7cbz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jackfei.wordpress.com/?p=160</guid>
		<description><![CDATA[I recently concluded a half-year packaging engagement where I converted about 150 application packages to common winbatch wrapper template for deployment by SCCM 2007.    I noticed packaging evolved over eight to ten years in the tools used (Install Shield, Wise, Winbatch) and the winbatch wrapper (in the beginning, unstructed free-form, in the current version, a populated &#8220;variable section&#8221;, &#8220;initializtion section&#8221;, &#8220;uninstall section&#8221; and &#8220;install section&#8221;, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=160&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently concluded a half-year packaging engagement where I converted about 150 application packages to common winbatch wrapper template for deployment by SCCM 2007.    I noticed packaging evolved over eight to ten years in the tools used (Install Shield, Wise, Winbatch) and the winbatch wrapper (in the beginning, unstructed free-form, in the current version, a populated &#8220;variable section&#8221;, &#8220;initializtion section&#8221;, &#8220;uninstall section&#8221; and &#8220;install section&#8221;, with called functions and subroutines.  It was no different than programming template used in a mature development team.  </p>
<p>What took getting used to was the direction set by the company that the most common package technique, capture msis, the methodology that spawned an industry and made Wise Adminstudio, Install Shield Admin Studio, and other freeware tools, was NEVER to be used.  Every &#8220;capture msi&#8221; in their portfolio was to be replaced with an install package that used the vendor installer!   Of course, the usual and customary package requirements, e.g. &#8221;hands off installation&#8221;, &#8220;no desktop shortcuts&#8221;, &#8220;no startup prompts&#8221;,  &#8220;no license registration&#8221;, etc. had to be met.</p>
<p>Once I got over my initial shock (how can you package without a snapshot capture tool as a mainstay?) I was surprised at the ease with which SCCM ready packages could be created, without surprises, without snapshot captures.  I began to think about all the effort spent by packagers creating &#8220;snapshot capture msis&#8221;.</p>
<p> Why had &#8220;snapshot captures&#8221; gained such widespread popularity?   I suspect they were manadated by Corporate IT.   There are certain advantages in the msi database technology:  consistent installer design and command line interface, support for install uninstall and repair,  common interfaces with Add-Remove-Programs and Shortcuts, etc.   The idea incompatible installers from different vendors could almost be  automatically reengineered and integrated with the corporate software deployment system was irresistable.   Too, the snapshot tools became mature and very reliable: they would find all the &#8220;before&#8221; and &#8220;after&#8221; changes to the file system and the registry and create an image.  The snapshot image could be edited and a well engineered msi could be generated, tested, and setup in the deployment system.  It seemed simple.  And it worked well for simple legacy applications that did not need to be changed.  But the approach was a failure with large and complex non-msi installations: such as ones with multiple spawned installers, file updates that required reboots,  or service starts.  Most packagers soon learned &#8220;when not to repackage&#8221;.</p>
<p>There were, of course, always &#8221;hidden costs&#8221;.   First, a snapshot capture tool is never intelligent enough.   It will reliably find all the changes to files and registry, but it can not determine where the change came from.  Some are the packaged application (must include), some belong to the install process (can be ignored), and some belong to background machine processes unrelated to the application (must exclude &#8211; else they could break the machine upon uninstall!)   So in the end, the company is dependent on the packager&#8217;s &#8220;judgement and experience&#8221; to decide &#8220;what to include / what to exclude&#8221;  when creating the msi installer.   Obviously, the burden on the packager (and risk of error) increases with large applications having thousands of files and registry keys!   It should not be surprising that several days may be required to create and test a repackaged msi.   The assertion that some applications can not be repackaged as msis applies in these cases.</p>
<p>The greatest hidden cost is &#8220;increased complexity in troubleshooting&#8221;. A repackaged msi can not be supported by the application vendor.  A packager is in a lonely position when an application problem can not be reproduced with original vendor media.  A not-uncommon nightmare scenario occurs when two snaphot capture msi conflict with each other and the snapshots were done by different contract packagers during the previous OS migration project.  Perhaps it is this nightmare scenario that led to the use (plus overhead) of a &#8221;conflict checking database&#8221; to isolate conflicts between poorly engineered vendor msis, and defective snapshot capture msis built in house.</p>
<p>As I continued working through the backlog, I realized neither I nor the company would ever need to confront these issues.  The package was what it was.  It would always check for and uninstall any previous or current version before the install.  If it could not be installed silently with setup.iss, I would use a scripted dialog.   It would apply the registry changes after the install.  The install result would be exactly what the vendor installer and my changes do, no more, no less and transparent to all.  An issue could be isolated to my code (which I fix) or the vendor installer (which I would document and workaround or forward to a vendor for ultimate resolution).</p>
<p>When I was all done, I had spent zero hours doing snapshot captures.  No effort editing snapshots, generating capture msis, exercising them, doing comparisons with vendor installers and troubleshooting.   No disk space is required to store snapshot images.  Most importantly, my reputation can not be tarnished by future issues with my snapshot capture msi installers.  </p>
<p>No more snapshot capture msis!  Not when we are witnessing the birth of a entirely new snapshot technology:  Microsoft App-V sequencing and virtual desktop images.  It may be the dawning of a new era but it seems like deja-vu to me.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jackfei.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jackfei.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jackfei.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jackfei.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jackfei.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jackfei.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jackfei.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jackfei.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jackfei.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jackfei.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jackfei.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jackfei.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jackfei.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jackfei.wordpress.com/160/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=160&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jackfei.wordpress.com/2010/07/16/no-more-capture-msis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6cbbb775a4f66d28606b7363bb3ccdf2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">qz7cbz</media:title>
		</media:content>
	</item>
		<item>
		<title>Active Setup and other Approaches to HKCU Population</title>
		<link>http://jackfei.wordpress.com/2010/01/24/active-setup-and-other-approaches-to-hkcu-population/</link>
		<comments>http://jackfei.wordpress.com/2010/01/24/active-setup-and-other-approaches-to-hkcu-population/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 07:02:40 +0000</pubDate>
		<dc:creator>qz7cbz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jackfei.wordpress.com/?p=154</guid>
		<description><![CDATA[Every packager needs a way to populate HKCU registry keys when the install is done by an account without a logged on user.    I have used four approaches: msi, run once registry key, populating user profile databases externally, and active setup. 1) msi. This approach can be used with snapshot capture msis or by creating [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=154&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Every packager needs a way to populate HKCU registry keys when the install is done by an account without a logged on user.    I have used four approaches: msi, run once registry key, populating user profile databases externally, and active setup.</p>
<p>1) msi.  This approach can be used with snapshot capture msis or by creating a transform for a vendor based msi.   Either way, you create one  component and keypath for all custom HKCU registy settings.  After the installation, the first user launch (via a shortcut) detects the missing keypath and initiates a &#8220;repair&#8221; to populate the registry entries.</p>
<p>The limitations are: it is only applicable to msi installers, it only works if there is an exposed user interface such as a shortcut, and it can be time consuming to design / test / debug a &#8220;snapshot capture msi&#8221; or &#8220;vendor msi transform&#8221; to accompish this.</p>
<p>2) run once.   Build a *.reg file containing all the required HKCU entries and to copy the reg file to a known location on the machine.  Then populate the HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce key with a &#8220;regedit /s  c:\temp\hkcu.reg&#8221; command.   The install stages the setup.   The command runs with the next logon.  The approach is simple, powerful and easy to use.</p>
<p>The major limitation is it is only applicable for the next logon user, limiting the flexibility of the package.  For example, it will fail when used in imaging situation that contains an embedded restart and logon and it will fail when subsquent users log on to the machine.</p>
<p>3) populate user profiles externally.  I have seen custom &#8220;profile population routines&#8221; in several companies I worked for.  Essentially, the routine will populate the &#8220;Default User&#8221; profile and &#8220;every other profile on the machine&#8221; externally.</p>
<p>While the approach is powerful and flexible, a lot of code needs to be written to perform these functions that is very difficult to maintain and understand.  Also, the code incurs a great deal of overhead so that it&#8217;s repetitive use in many applications would probably increase the length of the setup process, much of it non productive.   Consider what would happen when adding a new application to a &#8220;shared machine&#8221; or a &#8220;training machine&#8221;, for example.   Ultimately, I don&#8217;t like this approach because it really attempts to use code to &#8220;engineer around&#8221; a fundamental attribute of the windows architecture, namely a separate database for each logon user.</p>
<p>4) active setup approach.   Create a component in HKLM\Microsoft\Active Setup\InstalledComponents\yourcomponent and a &#8220;StubPath&#8221; with the command as you would put in &#8220;Run Once&#8221;!.</p>
<p>At logon time, windows compares the HKCU and HKLM active setup components and, if it is missing from HKCU, will and the component an then run the stub!</p>
<p>This solution seems to me to be ideal: it is simple and works the same for both imaging and enduser logon.   So why is it so underused?</p>
<p>I suspect the difficulty is the method has it&#8217;s roots in Windows development and not system adminstration.  Active Setup?  Guids?  Stubs?  What the heck is that.  If only Microsoft called it &#8220;User Staging&#8221; (instead of Active Setup),  used application names (instead of Guids) to define components and called it &#8220;runuser&#8221; (instead of stub), all packagers would be using this method.</p>
<p>So now you know.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jackfei.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jackfei.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jackfei.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jackfei.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jackfei.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jackfei.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jackfei.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jackfei.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jackfei.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jackfei.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jackfei.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jackfei.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jackfei.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jackfei.wordpress.com/154/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=154&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jackfei.wordpress.com/2010/01/24/active-setup-and-other-approaches-to-hkcu-population/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6cbbb775a4f66d28606b7363bb3ccdf2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">qz7cbz</media:title>
		</media:content>
	</item>
		<item>
		<title>How to Organize Your Software Library</title>
		<link>http://jackfei.wordpress.com/2009/11/03/how-to-organize-your-software-library/</link>
		<comments>http://jackfei.wordpress.com/2009/11/03/how-to-organize-your-software-library/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 13:15:22 +0000</pubDate>
		<dc:creator>qz7cbz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jackfei.wordpress.com/?p=132</guid>
		<description><![CDATA[A software library is &#8220;organic&#8221;, continuing to be updated with adds, modifications, and deletes as the company software portfolio changes.    A software library must be organized and the organizational structure must be consistent across all different software applications.   This means the same organization structure must apply to all: Microsoft Office 2007 at one extreme and an [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=132&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A software library is &#8220;organic&#8221;, continuing to be updated with adds, modifications, and deletes as the company software portfolio changes.   </p>
<p>A software library must be organized and the organizational structure must be consistent across all different software applications.   This means the same organization structure must apply to all: Microsoft Office 2007 at one extreme and an obscure Excel plug in at at the other.</p>
<p>A software library must contain all the &#8220;code changes&#8221; needed to produce the install package as well as the directions for producing them.  This way, a knowledgable packager can reproduce what the previous one, step by step, if needed to isolate an issue or to produce the &#8220;next release&#8221;.</p>
<p>Finally, a software library should be &#8221;self maintaining&#8221;.   NO CATALOGS to fall out of date.  NO ZIPFILES.   NO COMPRESSION.  No productivity drains in the process.</p>
<p>For my previous employer, the company software library was hosted in a secure server at a share named &#8220;Software Library&#8221;.     </p>
<p>a.  Below the Software Library folder were a series of application folders.   Each folder was named vendor &#8211; application</p>
<p>\Adobe &#8211; Acrobat Reader</p>
<p>\MS &#8211; Office 2007   </p>
<p>b.  The next level folder handled releases.   For example the subfolders for Adobe Reader included:</p>
<p>\7.0.9</p>
<p>\8.1.2</p>
<p>\9.2</p>
<p>c.   The critical folders are below the &#8220;version&#8221; folders</p>
<p>\notes &#8211; contains vendor install documentation plus high level and detailed instructions for creating the package.  My rule is include anything you &#8220;wish you had known&#8221; or &#8220;need to remember&#8221;.   You will be the best judge of the quality of  your instructions when you package the next release.</p>
<p>\source &#8211; contains an unchanged copy of the installer as it is provided by the vendor, either from a cd or downloaded.</p>
<p>\extract &#8211; contains an &#8220;unwrapped&#8221; version of the installer.   Usually, this meant extracting files from a zipfile or copying an embedded msi installer contained inside a &#8220;setup.exe&#8221;.</p>
<p>\snapshot &#8211; (when necessary) contains the &#8220;before and after&#8221; snapshot objects produced by the msi snapshot capture tool being used, i.e  Wise, Install Shield or other snapshot tool.</p>
<p>\package &#8211; contains all objects and only the objects required to produce a &#8220;complete install and setup&#8221; from a user with administrator access to the machine.  Must contain a script (*.bat, *.vbs or *.ps1)  able to produce an install without a dialog box and any required reboot suppressed.</p>
<p>The \notes \source \package folders were populated for every application I worked on.   </p>
<p>\extract was populated for 75% of applications I worked on.</p>
<p>\snapshot was populated for most all &#8220;non-msi&#8221; installers but never populated for an msi installer.</p>
<p>I added other folders when needed.  For example, I added a \admin folder producing an &#8221;admininstrative install&#8221; .  Another example,  I added a \pre-snapshot cleanup folder with a script when multiple changes needed to be made to a &#8220;pre&#8221; snapshot to create the required msi installer.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jackfei.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jackfei.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jackfei.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jackfei.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jackfei.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jackfei.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jackfei.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jackfei.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jackfei.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jackfei.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jackfei.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jackfei.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jackfei.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jackfei.wordpress.com/132/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=132&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jackfei.wordpress.com/2009/11/03/how-to-organize-your-software-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6cbbb775a4f66d28606b7363bb3ccdf2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">qz7cbz</media:title>
		</media:content>
	</item>
		<item>
		<title>MS Task Sequencer &#8220;Eliminates Packaging&#8221;</title>
		<link>http://jackfei.wordpress.com/2009/10/30/ms-task-sequencer-eliminates-packaging/</link>
		<comments>http://jackfei.wordpress.com/2009/10/30/ms-task-sequencer-eliminates-packaging/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 04:48:42 +0000</pubDate>
		<dc:creator>qz7cbz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jackfei.wordpress.com/?p=114</guid>
		<description><![CDATA[I saw a local job postion on dice.com for a &#8220;Ghost Image&#8221; opportunity for an individual with Windows 7 deployment experience.    &#8220;Work experience in a high demand project with short time frame to design and build a new deployment system&#8221;.  &#8220;Use of Task Sequencer for deploying OS &#38; applications is mandatory.&#8221; It was the &#8221;mandatory&#8221; use of Task [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=114&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I saw a local job postion on dice.com for a &#8220;Ghost Image&#8221; opportunity for an individual with Windows 7 deployment experience.   </p>
<p>&#8220;Work experience in a high demand project with short time frame to design and build a new deployment system&#8221;. </p>
<p>&#8220;Use of Task Sequencer for deploying OS &amp; applications is <strong>mandatory</strong>.&#8221;</p>
<p>It was the &#8221;mandatory&#8221; use of Task Sequencer that caught my interest.   I understood the &#8220;task sequencer&#8221; is the virtualization component in the October 20 MDOP release &#8221;just in time&#8221; for Windows 7  October 22.   In short a new product&#8230;.</p>
<p>I felt sad.  Here was the new version of the long waited Microsoft OS. I had the skills of a packager but the use of the skill was banned due to a new Microsoft product that would solve everything.  Use the task sequencer,  create images, or don&#8217;t come to work for us!  Wow.  </p>
<p>To console myself, I began reading product documentation.  In this case, Microsoft&#8217;s &#8220;Application Virtualization 4.5 Sequencing Guide&#8221;.   I&#8217;d like to pass along some direct quotes from the documentation, things Microsoft explains about &#8221;sequencing&#8221;,  i.e. Microsoft application virtualization imaging. </p>
<p>5.  <strong>Sequencing Limitations.  </strong>  Microsoft listed &#8221;showstoppers&#8221;</p>
<p>a. applications exceed 4 GB in size</p>
<p>b. applications that start services at boot time</p>
<p>c. applications that require device drivers</p>
<p>d. applications shared by more than one application</p>
<p>e. applications that are part of the OS</p>
<p>f. applications that use COM+</p>
<p>g.&#8221;COM.DLL surrogate applications&#8221;.  </p>
<p>It appears to me that &#8221;image builders&#8221; will encounter some of the same issues packagers encountered in building repackaged msis!</p>
<p>6. <strong>Sequencing Phases.</strong>   &#8220;There are <strong>four phases</strong> to sequencing a package; Installation, Launch, Customization, and Save. In this section I’ll give a high level overview of each phase&#8221;&#8230;.  </p>
<p>It appears to me &#8221;image builders&#8221; will be learning Microsoft&#8217;s way to separate the &#8220;snapshot captures&#8221; for the &#8220;install&#8221;, &#8220;reboot&#8221; and &#8220;configuration&#8221; steps that packagers do in producing silent installs. </p>
<p>The successful creation of the four phases results these objects:  *.SPRJ, *.SFT, *.OSD, *.ICO, *.XML-Manifest, and *.MSI (to enable launch by Active Directory).  </p>
<p>11. <strong>Advanced OSD Scripting.</strong>  &#8220;One of the most common methods is <strong>making modifications to the OSD file</strong> to allow certain actions to be performed at a specified time during the execution of the application.&#8221;</p>
<p>It appears to me image creators will have a chance to be xml scripters (an *.OSD file is, an XML file that &#8220;starts the application using the objects generated by the sequencer&#8221;).  I expect seasoned  image creators will learn how to insert a *.vbs or *.ps1 inside an *.OSD file just like packagers learned how to put an *.vbs custom action inside an msi.</p>
<p>After reading, I felt better.  Packaging may done but a bright future lies ahead for those who &#8220;have experience creating images&#8221;.   I just updated my resume to include &#8220;Symantec Ghost&#8221;.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jackfei.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jackfei.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jackfei.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jackfei.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jackfei.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jackfei.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jackfei.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jackfei.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jackfei.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jackfei.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jackfei.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jackfei.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jackfei.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jackfei.wordpress.com/114/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=114&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jackfei.wordpress.com/2009/10/30/ms-task-sequencer-eliminates-packaging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6cbbb775a4f66d28606b7363bb3ccdf2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">qz7cbz</media:title>
		</media:content>
	</item>
		<item>
		<title>Adobe Reader and the Myth of Sisyphus</title>
		<link>http://jackfei.wordpress.com/2009/10/17/adobe-reader-and-the-myth-of-sisyphus/</link>
		<comments>http://jackfei.wordpress.com/2009/10/17/adobe-reader-and-the-myth-of-sisyphus/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 03:52:52 +0000</pubDate>
		<dc:creator>qz7cbz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jackfei.wordpress.com/?p=69</guid>
		<description><![CDATA[There is a Greek Myth of Sisyphus.  He is pushing a rock up the mountain and it is hard work.  He works, and works and finally the rock is at the the peak.  He pauses to catch his breath only to see the rock rolling down the other side of the mountain.   The Adobe Reader [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=69&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There is a Greek Myth of Sisyphus.  He is pushing a rock up the mountain and it is hard work.  He works, and works and finally the rock is at the the peak.  He pauses to catch his breath only to see the rock rolling down the other side of the mountain.   The Adobe Reader Gods  have condemned IT departments everywhere to this fate&#8230;&#8230;. </p>
<p>1.  How come?  Well, Adobe Reader is everywhere like a weed.  It can&#8217;t be killed.  It&#8217;s embedded in the installers of many desktop software products whose documentation is in the Adobe *.pdf format.</p>
<p>2.  In most companies, desktop applications are bought and installed at different times over the years, so they have different versions of Adobe Reader on the desktop.   When I started, we had Reader versions 5 through 7 on company desktop.  </p>
<p>3.  My manager had a vision: &#8221;one version of Adobe Reader.   It was the Holy Grail.   At the time, the latest version was 7.0.9.    So I created an installer for 7.0.9 and made sure it could uninstall version 6 and earlier versions of 7 .  I wrote a script to uninstall 5.  I started pushing the rock up the mountain&#8230;.</p>
<p>4.  At the time, the automated software deployment system was not ready so I just left the installer &#8220;as &#8211; is&#8221; until such time it would be ready.  It took longer than expected.</p>
<p>5.  By the time the deployment system was ready, the latest Adobe Reader became version 8.0.0.   I was initially pleased that Adobe provided a tool to &#8220;customize&#8221; the Reader install.  It was easy to use but I had misgivings because it created an msi transform.  There is a dark side to the msi transform that I feared&#8230;.</p>
<p>A little bit of technical background&#8230;.</p>
<p>An msi is a database.  A transform is a version specific database override.  At installation time the windows installer (msiexec.exe) applies both the database and the transform to produce the desktop &#8220;install result&#8221;.   So far so good.</p>
<p>Now there are two situations the msi installer needs to cover: the install (on a new machine)  and the upgrade (on an older version).  The problem is an msi + transform &#8220;works&#8221; on the new machine only.  It does not work on the upgrade: the only way to do it is uninstall the old version first!</p>
<p>4.  Normally, the transform isn&#8217;t a problem because the upgrade are not supposed to happen that all that often.  Adobe Reader is an exception.</p>
<p>5.  Hackers and Virus Writers discovered that Adobe Reader Versions above 7.x contained vulnerabilities that could be exploited.  By the beginning of 2009, Adobe Reader became the most vulnerable &#8221;point of attack&#8221; on the desktop and security experts were warning against using Adobe Reader due to the risks it posed. </p>
<p>6.  To their credit, Adobe did respond by patching Reader:  8.0.0 became 8.1.0 became 8.1.9 became 8.1.15 then 9.0 came.   I would  check for a new version msi, download it, build a transform, set it up in the deployment system, and began testing.  Then I would discover a newer version on the Adobe website.</p>
<p>Three times I pushed the rock up the mountain.  And three times it rolled down again.  Then I remember I wasn&#8217;t in ancient Greece, I was in modern day America.  And in America, three strikes and you&#8217;re out.  I surrendered.</p>
<p>7.  At last glance Adobe Reader is Version 9.2 in October 2009.  I do not expect it will be the last upgrade.  Just make sure your company antivirus software protects your computers against viruses and hacks embedded in *.pdf files launched by Adobe Reader.</p>
<p>Sisyphus, toil no more.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jackfei.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jackfei.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jackfei.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jackfei.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jackfei.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jackfei.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jackfei.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jackfei.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jackfei.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jackfei.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jackfei.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jackfei.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jackfei.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jackfei.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=69&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jackfei.wordpress.com/2009/10/17/adobe-reader-and-the-myth-of-sisyphus/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6cbbb775a4f66d28606b7363bb3ccdf2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">qz7cbz</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows 7 and Powershell</title>
		<link>http://jackfei.wordpress.com/2009/10/13/windows-7-and-powershell/</link>
		<comments>http://jackfei.wordpress.com/2009/10/13/windows-7-and-powershell/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 13:42:31 +0000</pubDate>
		<dc:creator>qz7cbz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jackfei.wordpress.com/?p=82</guid>
		<description><![CDATA[October 22, 2014. Five years after the production rollout of Windows 7, the packagers of the world will see it as a transformative event.  My predictions are: 1) 70% of desktops will run Windows 7  (Windows XP will be second with zero installations of Vista in Business Environments). 2) Application virtualization will transform the nature [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=82&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>October 22, 2014.</p>
<p>Five years after the production rollout of Windows 7, the packagers of the world will see it as a transformative event. </p>
<p>My predictions are:</p>
<p>1) 70% of desktops will run Windows 7  (Windows XP will be second with zero installations of Vista in Business Environments).</p>
<p>2) Application virtualization will transform the nature of &#8220;software support&#8221;.  Third party integrators, with offshore employees. will provide applications through images.   These images will be maintained separately and independently of other desktop changes.  </p>
<p>3) And packagers will need to learn to be powershell programmers.  It will be a challenge of a lifetime: to learn O-O programming using UNIX command lines&#8230;&#8230; </p>
<p>But in between now and then there is a detail that should not be overlooked.   Currently, more than 70% of the install base is a version of Windows XP!  And 0% of the install base use the production version of Windows 7, ship date October 22, 2009.</p>
<p>1.  Windows 7 will ship with Powershell 2.0.   A ship date for Powershell 2.0 for Windows XP has not been announced but I expect it to be available before the end of this year.</p>
<p>2.  Now I&#8217;m an enterprise IT manager and I&#8217;m thinking about Powershell.   I know my cost is people time and I need to think about how to use their time productively.   I know Powershell 2.0 is the future but I also know there is a learning curve, at best, my leads only know batch and vb script.  And they&#8217;re busy.</p>
<p>3. I&#8217;m thinking.   It would be good to use the same scripting language for all my XP and Windows 7 desktops but&#8230;</p>
<p>At least 100 customers complained to the VP last time we added some wsh commands to the logon script because they had wsh 5.6 instead of wsh 5.7.  So I need to think about &#8220;the effort and pain to get Powershell 2.0 on Windows XP&#8230;.I need to first get all my Windows XP desktops to SP3, then I need to install and enable Powershell 2.0.   </p>
<p>4.  To do this, I need two projects: to upgrade XP to SP3 and to deploy powershell 2.0 to all the XP SP3 desktops.   Then I&#8217;m ready.   But do I really want to do this?   We&#8217;re telling everyone we need to replace XP with Windows 7 and now we&#8217;re doing two projects to make XP forward compatible with Windows 7&#8230;. </p>
<p>5.  So as the IT manager, I direct my team &#8220;we are NOT going to use Powershell 2.0 on XP.   It isn&#8217;t worth our time to upgrade them.  So if plan to use Powershell 2.0 you need to make sure it will only ever be used on Windows 7 desktops and never on XP desktops. </p>
<p>And while I encourage you to learn powershell, don&#8217;t use it if it will cause deadlines to slip.  When in doubt, just use vbscript&#8230;.</p>
<p>Most admins, who have trouble writing a batch file and who only know how to modify a vbscript written by someone else are happy to hear &#8220;don&#8217;t use powershell&#8221;.</p>
<p>But a few forward thinking packagers understand where the opportunity lies and read the Wikipedia Powershell article: <a href="http://en.wikipedia.org/wiki/Windows_PowerShell">http://en.wikipedia.org/wiki/Windows_PowerShell</a>.</p>
<p>And downloads the latest Powershell 2.0 from Microsoft: <a href="http://www.microsoft.com/downloads/details.aspx?familyid=7C8051C2-9BFC-4C81-859D-0864979FA403&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?familyid=7C8051C2-9BFC-4C81-859D-0864979FA403&amp;displaylang=en</a></p>
<p>And he takes the first steps to become a Powershell guru.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jackfei.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jackfei.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jackfei.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jackfei.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jackfei.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jackfei.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jackfei.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jackfei.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jackfei.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jackfei.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jackfei.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jackfei.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jackfei.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jackfei.wordpress.com/82/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=82&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jackfei.wordpress.com/2009/10/13/windows-7-and-powershell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6cbbb775a4f66d28606b7363bb3ccdf2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">qz7cbz</media:title>
		</media:content>
	</item>
		<item>
		<title>A Systematic Package Production Process</title>
		<link>http://jackfei.wordpress.com/2009/10/02/a-systematic-package-production-process/</link>
		<comments>http://jackfei.wordpress.com/2009/10/02/a-systematic-package-production-process/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 17:27:35 +0000</pubDate>
		<dc:creator>qz7cbz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jackfei.wordpress.com/?p=70</guid>
		<description><![CDATA[Software packaging is a &#8220;one off&#8221;.    A computer does not have some software installed.  An IT person must &#8220;do something&#8221; to install the software.  This is the real &#8220;work&#8221; to be done.   Software packaging is &#8220;automating a repeatable install&#8221; to enable the real work to be done more quickly or more accurately, or even better, make it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=70&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Software packaging is a &#8220;one off&#8221;.    A computer does not have some software installed.  An IT person must &#8220;do something&#8221; to install the software.  This is the real &#8220;work&#8221; to be done.   Software packaging is &#8220;automating a repeatable install&#8221; to enable the real work to be done more quickly or more accurately, or even better, make it impossible for human beings to &#8220;break&#8221; and &#8220;do wrong&#8221;.</p>
<p>But the effort to package is not free, it requires effort to discover and document the installation, to build and test and automated script.  Put simply, the effort put into packaging must be enough to justify the effort to 1) find a repeatable install process 2) build and debug the install package and 3) test the package in a controlled setting.   Every company I know sets a &#8220;minimum number&#8221; of installations before packaging.  The places I have worked in have set that number to 10 &#8211; 20 installs. </p>
<p>The packaging process contains three clear and distinct steps:</p>
<p>1.  Environment Staging Process</p>
<p>The goal is to be able to reroduce a working installation on a baseline machine from start to finish.</p>
<p>If your work environment has regular user ids without &#8221;Administrator&#8221; access to their machine, it is *CRITICAL*  to do the initial logon and application startup by a regular user.</p>
<p> Many vendor installers simply fail to work properly when launched by a regular user logon.  While it is not the fault of the packager, it will be simpler to find a workround rather than calling a vendor (who will have nobody who understands msi technology or windows internals).</p>
<p>It is important the install with the Administrator account then start the application with the credentials of the logged on user.</p>
<p>a.  Collect all the vendor installers and installation instructions required to generate the working application.</p>
<p>b.  Review all vendor documentation and create a clean baseline machine with the vendor supported version and service pack of the operating system, such as Windows XP SP3 plus all documented requirements, such as Microsoft Office.</p>
<p>c.  Install the application and document the steps followed to &#8220;start and setup the application.</p>
<p>d.  Confirm with the application SME that the application is &#8220;complete and working correctly&#8221;, and document the &#8220;tests used&#8221; to prove application functionaliy.</p>
<p>2.   Packaging Process</p>
<p>The goal is to create a silent install that, when completed, permits a user to immediately start the application and do productive work without one time setup or configuration steps.</p>
<p>a.  Separate the different vendor installers</p>
<p>b. Find a way to have each installer start, complete the install, and quit without displaying a dialog box, suppressing all required reboot.</p>
<p>c. Then write a script to launch each installer one by one.   For each installler 1. check whether the install is needed and skip if already installed  2. do the install  3. check for successful install and exit with error code if the install fails.</p>
<p>3.   Package Testing Process</p>
<p>The goal is to confirm the package install, uninstall, and update produce the desired results.</p>
<p>Here, it is critical to do the install as the Administrator of the machine and to do the startup as a regular logon user.</p>
<p>1) Baseline Test</p>
<p>On a clean baseline machine, run the package and confirm application functionality using the tests done during Environment Staging.</p>
<p>2) Uninstall Test</p>
<p>On the same baseline machine, run the uninstall via Add-Remove-Programs and confirm all artifacts (files and registry settings) are removed.</p>
<p>3) Upgrade Test</p>
<p>For each currently supported older version, on a controlled environment, run the install and determine the upgrade install completes successfully and the application runs without error.</p>
<p>My own belief is packaging is &#8220;done&#8221; with the completion of step 3.   You have a working package that can be copied to a server share location and launched.  In some organizations, this is &#8220;more than enough&#8221;.  </p>
<p>In larger enterprises with thousands of user computers, this is more likely &#8220;not enough&#8221;   For packagers in these companies who also have the responsibility for &#8220;setting up the package in the deployment system&#8221;, I offer these hints, however each deployment system has it&#8217;s own quirks.</p>
<p>1. First and foremost, script in a language that can be used directly by your deployment system.   Some deployment systems do not work with *.bat and *.cmd.   Some powerful scripting tools, e.g. winbatch, require a separate compile step lengthens the script change process.</p>
<p>My recommendation is stay with vbscript.  All deployment systems will support it natively and you can always find &#8220;code samples specfic to your needs&#8221; by a quick internet search.   But in most cases, you do best to adopt the most widely used scripting language and avoid new ones.</p>
<p>2.  Second, most every deployment system worth anything supports &#8220;software package reuse&#8221;.   Find ways to &#8220;minimize variation&#8221;:  for example if you already have isscript11 setup and your application has isscript9, try using the existing package.  Often times &#8220;forward compatibility&#8221; is built in by the vendor.    You don&#8217;t need to expend effort on things that are not there and things that didn&#8217;t change.</p>
<p>3.  Third most every deployment system accepts msi, mst, and property table overrides so importing an msi and setting up the msi is trivial   However the first time deployment of any vendor msi is <em>unpredictable.  </em></p>
<p>Many MSIs (vendor name and IT size mean nothing) are not engineered to support enterprise deployment.  Several times, I found out that due to bad msi engineering the <em>only</em> way to have the package install is: have the deployment system 1. copy the installer to c:\apps\source folder then,   2. start the installer at user logon by &#8221;run once&#8221; registry key.</p>
<p>Simple enough for those accustomed to &#8221;microsoft indirection&#8221; and one off design.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jackfei.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jackfei.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jackfei.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jackfei.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jackfei.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jackfei.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jackfei.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jackfei.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jackfei.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jackfei.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jackfei.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jackfei.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jackfei.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jackfei.wordpress.com/70/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=70&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jackfei.wordpress.com/2009/10/02/a-systematic-package-production-process/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6cbbb775a4f66d28606b7363bb3ccdf2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">qz7cbz</media:title>
		</media:content>
	</item>
		<item>
		<title>How to Avoid Software Packaging Rework</title>
		<link>http://jackfei.wordpress.com/2009/09/29/how-to-avoid-software-packaging-rework/</link>
		<comments>http://jackfei.wordpress.com/2009/09/29/how-to-avoid-software-packaging-rework/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 16:51:04 +0000</pubDate>
		<dc:creator>qz7cbz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jackfei.wordpress.com/?p=50</guid>
		<description><![CDATA[Most of the time the packager receives vendor installer source in the form of a CD or a downloaded zip file. 1. Copy the vendor source to your software library share location, specifically a \source subfolder. By way of explanation, I recommend organizing your package share library by folder and subfolder:  a top level folder with the vendor name, product and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=50&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Most of the time the packager receives vendor installer source in the form of a CD or a downloaded zip file.</p>
<p>1. Copy the vendor source to your software library share location, specifically a \source subfolder.</p>
<p>By way of explanation, I recommend organizing your package share library by folder and subfolder:</p>
<p> a top level folder with the vendor name, product and version i.e. Microsoft Office Visio 2003 SP3.</p>
<p>Below are subfolders</p>
<p>\notes             for vendor documentation and packaging notes<br />
\source          for unaltered vendor cd and download<br />
\package       for complete package with *.bat or *.vbs launcher<br />
\extract         for separate &#8221;extracted vendor installers&#8221;<br />
\snapshot     for &#8221;repackaged&#8221; vendor installer<br />
\config           for &#8220;custom&#8221; settings</p>
<p>Only the \notes \source and \package folders are always populated in a completed package, the others are created when needed.</p>
<p>2.  On a cleanly imaged machine.  Do a complete manual install of using vendor source.  Then check with an SME that you have a working setup that meets all business requirements. Don&#8217;t begin packaging until your setup is confirmed by an application SME!</p>
<p>3.  From your earlier effort, you know the predecessors but you don&#8217;t know the vendor installer (yet).   Beware!  Once you are beyond Microsoft, Adobe, Symantec, expect anything and everything!  Many vendors provide proprietary installers and embed multiple msi installers inside their *.exe file.  Most msi installers have design defects and have many many custom actions so their behavior a vendor installer is <em>unpredictable</em>.  </p>
<p>4. Some internet vendors use installers that require access and download from the internet and do not even supply a standalone installer.  If your customer made a commitment to such a vendor without consulting IT, your only choice is &#8221;script the install steps&#8221;. Make certain you check vendor website availability send an error message saying vendor xxx site is down.  This way, your help desk will know who to call when the &#8220;package doesn&#8217;t work&#8221;. </p>
<p>5. If the vendor provides a standalone installer, extract the installer into embedded installers and identify the separate installers used (either *.exe or *.msi).   Beware.   Due to corporate mergers and acquisitions I have several examples of embedded installers inside embedded installers: with each takeover vendor adding an additonal embedded layer.  </p>
<p>6. A well designed installer has documented command line options for extraction.  Others do not and purge installer source objects after the install (effectively breaking msi repair functionality).  For these, start the install dialog but pause at the last dialog before the install begins.   Then look for the location (usually in a local settings\temp subfolder in your user profie) that contains the installer source.  Copy it to the \extract folder.   </p>
<p>7. If you find any embedded installers (such as Adobe Reader, Microsoft Visual C++ Redistributable,  Microsoft Active X,  Sun Java JRE Runtime, Install Shield Script) package them <em>separately </em>as package dependencies.   You <em>will</em> reuse them.</p>
<p>8. After you have extracted the installers, consult Apps Deploy to research how others may have attempted to handle the same application.  They provide important clues but don&#8217;t count on them until they are &#8220;proven to work&#8221; on your desktop.</p>
<p>9.  In the absence of documentation, I suggest the following &#8220;generic tips&#8221; for handling vendor installers:</p>
<p>a. if the installer is non-msi and the vendor is defunct, repackage the installer as an msi.   Capture msi&#8217;s will be well designed, clean and not have &#8220;custom action workarounds&#8221;.</p>
<p>b. if the installer is msi, do not repackage the msi installer.  Repackaging an msi is <em>never</em> productive, do anything else.</p>
<p>c. if an extracted msi installer &#8220;errors out when run&#8221; and &#8220;isscript&#8221; is visible, install isscript.msi as a predecessor and try overriding the default properties with ISSETUPDRIVEN = 1.   Other custom actions in the INSTALLEXECUTESEQUENCE table may also need to be eliminated by commenting them out, i.e. by putting a negative sign in the run sequence number entry.</p>
<p>d. if an msi installer requires &#8220;non default settings&#8221; set through a dialog box, create a &#8220;response transform&#8221; to apply with the msi.   Other than documented vendor support for transforms like Adobe, this is the only situation where I  recommend a transform over a direct msi edit. </p>
<p>10.  Simulate the behavior of the complete install package by 1. installing the package as the Adminstrator (no access to domain resources) and 2. logging on as the first time user and starting the application. </p>
<p>11.  Once any installer not currently in the deployment system passes step 10,  set it up in the deployment system and make sure it works and mark it complete.</p>
<p>12.  Conversely, fix any defects and do NOT setup any installer in the deployment system until it is <em>100% debugged outside</em> the deploy system.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jackfei.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jackfei.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jackfei.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jackfei.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jackfei.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jackfei.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jackfei.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jackfei.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jackfei.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jackfei.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jackfei.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jackfei.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jackfei.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jackfei.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=50&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jackfei.wordpress.com/2009/09/29/how-to-avoid-software-packaging-rework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6cbbb775a4f66d28606b7363bb3ccdf2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">qz7cbz</media:title>
		</media:content>
	</item>
		<item>
		<title>How to Package MSI HKCU Settings</title>
		<link>http://jackfei.wordpress.com/2009/09/15/how-to-package-msi-hkcu-settings/</link>
		<comments>http://jackfei.wordpress.com/2009/09/15/how-to-package-msi-hkcu-settings/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 15:25:54 +0000</pubDate>
		<dc:creator>qz7cbz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jackfei.wordpress.com/?p=40</guid>
		<description><![CDATA[It does not matter what &#8220;automated&#8221; software deployment system you acquired:  Microsoft SMS / SCCM;  HP Radia,  Symantec Altiris, CA Desktop Management, Zenworks, etc. 1.  The initial excitement comes with the ease with which msi can be imported and set up automatically! 2. The initial testing occurs and results seem positive but anomolies are noticed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=40&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It does not matter what &#8220;automated&#8221; software deployment system you acquired:  Microsoft SMS / SCCM;  HP Radia,  Symantec Altiris, CA Desktop Management, Zenworks, etc.</p>
<p>1.  The initial excitement comes with the ease with which msi can be imported and set up automatically!</p>
<p>2. The initial testing occurs and results seem positive but anomolies are noticed in that custom user settings are &#8220;not correct&#8221; even though they tested &#8220;perfectly fine&#8221; outside the deployment system.</p>
<p>3. Panic sets in when it is realized that the deployment system performs installs with the credentials of the local administrator account.  With a bit of reflection, the desktop engineer realizes &#8220;admininstrator&#8221; 1) has no access to the credentials of the logon user and 2) has no access any domain resources and can not be made a domain member.</p>
<p>4.  Panic gives way to a sober assessment that some packages and scripts completed before this realization need to be redone.   But how?</p>
<p>Well, my experience with the initial setup design for more than one deployment system suggests:</p>
<p>First, determine whether your deployment system supports deployment using the credentials of the logged on user; check out what happens when you &#8220;push an install to a machine without a logged on user&#8221;.   The result will tell you &#8220;whether your deployment system&#8221; can help with the issue.  Don&#8217;t be surprised to discover there is no other viable option than to deploy using the administrator (or service) account.</p>
<p>Second, pick on one basic approach for applying custom HKCU registry settings.   All approaches assume you have isolated the HKCU registry settings that need to be applied, probably in the form of an *.reg file.</p>
<p>Approach 1.  add the registry keys and component (with keypath) to the msi so they will be installed with a repair when launched by the logon user.</p>
<p>Approach 2. add the registry keys and component (with keypath) as an msi transform and install with the msi.   They will be installed with a repair when launched by the logon user.</p>
<p>Approach 3.  script the change using vbscript.  Create a second vbscript that essentially copies the &#8220;registry change&#8221; vbscript to a known location on the machine and sets the HKLM &#8216;run once&#8217; registry key.   This will run with the next user logon.</p>
<p>While all approaches &#8220;work&#8221;, they are not the same in ease of maintenance and user acceptance.</p>
<p>Approach 1:  results in the &#8220;cleanest&#8221; installer but it can be very time to introduce this change on an unfamiliar msi.  Worse, the change has to be reintroduced each time the msi gets updated.   Also, the necessity of a &#8220;repair&#8221; at first startup can generate questions to the Help Desk.</p>
<p>Approach 2: is the textbook approach but, in my option, is the most costly to maintain.   Because transformed installations can NOT be updated later by a second transform, an uninstall must be performed when the msi gets updated.   The same startup issues apply.</p>
<p>Approach 3: is my preferred approach when I expect the msi will be updated in the future.   By separating the customization from the installer, the next version is far simpler to build, indeed if no custom registry changes occur, the old script can be reused with the newer version msi! </p>
<p> The &#8221;repair dialog box&#8221; never appears.  The machine script location is documented for reuse by all when a new user logs on the machine.</p>
<p>Another advantage is this approach works &#8220;transparently when access to domain resources&#8221; is needed to complete a setup &#8211; very difficult with msi only.</p>
<p>By the way, when scripting a registry change, it is a best practice to contain all logic in the script rather than having a script apply an external *.reg file.   One object in the deployment system is simpler and simpler is better.  KISS.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jackfei.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jackfei.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jackfei.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jackfei.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jackfei.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jackfei.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jackfei.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jackfei.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jackfei.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jackfei.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jackfei.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jackfei.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jackfei.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jackfei.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=40&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jackfei.wordpress.com/2009/09/15/how-to-package-msi-hkcu-settings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6cbbb775a4f66d28606b7363bb3ccdf2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">qz7cbz</media:title>
		</media:content>
	</item>
		<item>
		<title>MSI Internals for Packagers: 101</title>
		<link>http://jackfei.wordpress.com/2009/09/11/msi-internals-for-packagers-101/</link>
		<comments>http://jackfei.wordpress.com/2009/09/11/msi-internals-for-packagers-101/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 19:41:12 +0000</pubDate>
		<dc:creator>qz7cbz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jackfei.wordpress.com/?p=29</guid>
		<description><![CDATA[1.  An msi is a relational database containing multiple tables with rows and columns, similar to an excel spreadsheet.   To see for yourself, down the free Microsoft msi editor, Orca, and open any *.msi file. 2.  Broadly, an msi database contains two different kinds of tables: &#8221;content&#8221; tables to organize changes to be installed on the desktop and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=29&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>1.  An msi is a relational database containing multiple tables with rows and columns, similar to an excel spreadsheet.   To see for yourself, down the free Microsoft msi editor, Orca, and open any *.msi file.</p>
<p>2.  Broadly, an msi database contains two different kinds of tables: &#8221;content&#8221; tables to organize changes to be installed on the desktop and &#8220;run&#8221; tables add or remove objects to the desktop.</p>
<p>3.  Content tables are organized heiarchically.   The heiarchy is: Feature, FeatureComponent, Component.   A component may contain keypath, a file or registry key used to check whether the component is installed.   This means each file (or registry) belongs to one component, which belongs to a featurecomponent, which belongs to a feature.   Installs are managed &#8220;by feature&#8221; &#8211; either every component in a feature gets installed or none at all!</p>
<p>4. Run tables process commands using the windows installer program, msiexec.exe.   When an msi is double clicked, the InstallUISequence table process dialog box responses and updates the properties table.  When the last instruction last instruction is comple, control passes to the InstallExecuteSequence table to do the installation.  Completely different tables handle the &#8221;Administrative&#8221; and &#8220;Advertised&#8221; installs. </p>
<p>5. A silent install (msiexec.exe /i  /qn)<em> bypasses</em> the InstallUISequence table and begins the install using default setups of the Properties table.   The reason so many msi silent installs fail to work properly is bad msi engineering:  the defaults in the properties table are invalid or the code is unstructured.</p>
<p>6. A transform is a &#8220;database override&#8221; applied together with the original msi by the msiexec.exe command at installation time.  As such, it is a one shot approach: it is not possible to update a &#8220;transformed installation&#8221; by applying the same msi with a different transform, it is always necessary <em>uninstall</em> the transformed installation to install a changed version.</p>
<p>7.  Usually, it is easier to modify the original msi (work around the design flaw) rather than creating a transform.  An exception is the &#8220;response transform&#8221;: a fixed response to the InstallUISequence applied with an original msi by msiexec.exe to produce a working silent install. </p>
<p>8.  A custom action is a &#8220;workaround&#8221; to perform actions outside the control structure of msiexec.exe (windows installer) and the msi database.   It is true that custom actions are flexible and powerful.  It is also true that custom actions undermine the integrity of the msi and can be difficult to troubleshoot and maintain.   Avoid them whenever possible: find a better way before using one and, as needed, work around those introduced by outside vendors.   Really.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jackfei.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jackfei.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jackfei.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jackfei.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jackfei.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jackfei.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jackfei.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jackfei.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jackfei.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jackfei.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jackfei.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jackfei.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jackfei.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jackfei.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jackfei.wordpress.com&amp;blog=9191345&amp;post=29&amp;subd=jackfei&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jackfei.wordpress.com/2009/09/11/msi-internals-for-packagers-101/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6cbbb775a4f66d28606b7363bb3ccdf2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">qz7cbz</media:title>
		</media:content>
	</item>
	</channel>
</rss>
