<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://gormanonline.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Lifestyle of the MSIdle - All Comments</title><link>http://gormanonline.com/blogs/msidle/default.aspx</link><description>Join me on my journey to become one of the &amp;quot;MSIdle&amp;quot; -- those elite geeks who code an MSI patch faster than a speeding bullet, can write custom actions in a single bound, and make the world of deployment safe for the rest of us.</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>re: CVS and CruiseControl.NET and password exposure</title><link>http://gormanonline.com/blogs/msidle/archive/2008/09/19/cvs-and-cruisecontrol-net-and-password-exposure.aspx#657</link><pubDate>Mon, 22 Sep 2008 02:06:20 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:657</guid><dc:creator>Christopher Painter</dc:creator><description>&lt;p&gt;I read the title and first thing I thought of was the cvs login command. &amp;nbsp;Ok, well, second thing... first thing was really VSTS/TFS rocks.&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=657" width="1" height="1"&gt;</description></item><item><title>re: Vacation's Over!</title><link>http://gormanonline.com/blogs/msidle/archive/2008/07/01/vacation-s-over.aspx#653</link><pubDate>Sat, 13 Sep 2008 14:58:43 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:653</guid><dc:creator>Mom</dc:creator><description>&lt;p&gt;Don't think we're ever on vacation - just taking a short break from the mundane.&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=653" width="1" height="1"&gt;</description></item><item><title>re: Common Task: Optionally Cleanup User Data on Uninstall</title><link>http://gormanonline.com/blogs/msidle/archive/2008/09/04/common-task-optionally-cleanup-user-data-on-uninstall.aspx#651</link><pubDate>Fri, 05 Sep 2008 19:46:25 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:651</guid><dc:creator>SusanGorman</dc:creator><description>&lt;p&gt;HookEm,&lt;/p&gt;
&lt;p&gt;Yeah, I started out with custom actions to delete things, but it became undesirable for us for this reason: &lt;/p&gt;
&lt;p&gt;By having the actions embedded in a custom action it was actually sort of hiding the actions from easy view. It defeats the table-driven intention of the MSI and moves code into, well, custom actions. We preferred to have the functionality more directly viewable in the tables.&lt;/p&gt;
&lt;p&gt;That's also a good point about using UPGRADINGPRODUCTCODE. In our case, we DID want to ask the user what they wanted, so I'm keying off another property, but as you say, if you don't want to ask the user then the UPGRADINGPRODUCTCODE property is a good flag to use.&lt;/p&gt;
&lt;p&gt;As always, excellent points!&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=651" width="1" height="1"&gt;</description></item><item><title>re: Common Task: Optionally Cleanup User Data on Uninstall</title><link>http://gormanonline.com/blogs/msidle/archive/2008/09/04/common-task-optionally-cleanup-user-data-on-uninstall.aspx#650</link><pubDate>Fri, 05 Sep 2008 18:46:58 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:650</guid><dc:creator>HookEm</dc:creator><description>&lt;p&gt;The conditioning of your custom &amp;quot;clean-up&amp;quot; CAs can be handled during an upgrade scenario by just using the standard MSI public property UPGRADINGPRODUCTCODE (&lt;a rel="nofollow" target="_new" href="http://msdn.microsoft.com/en-us/library/aa372380"&gt;msdn.microsoft.com/.../aa372380&lt;/a&gt;(VS.85).aspx).&lt;/p&gt;
&lt;p&gt;The best way is to ask the user at uninstall whether or not they want to remove user data. &amp;nbsp;If UPGRADINGPRODUCTCODE is set, don't ask the user to remove data and don't execute the CA that removes the data (b/c the uninstall is running during an upgrade scenario).&lt;/p&gt;
&lt;p&gt;If you don't want to prompt the user, then best practice would be to leave the data when an uninstall is running via an upgrade scenario (UPGRADINGPRODUCTCODE is set) and remove the data if uninstall is being executed by the user via Add/Remove Programs / Software Explorer (NOT UPGRADINGPRODUCTCODE).&lt;/p&gt;
&lt;p&gt;-C&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=650" width="1" height="1"&gt;</description></item><item><title>re: I'm a slacker!</title><link>http://gormanonline.com/blogs/msidle/archive/2008/09/02/i-m-a-slacker.aspx#641</link><pubDate>Tue, 02 Sep 2008 17:39:25 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:641</guid><dc:creator>Christopher Painter</dc:creator><description>&lt;p&gt;For your InstallScript issue, check out this thread:&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_new" href="http://community.acresso.com/showthread.php?t=163177&amp;amp;highlight=isbe.dll"&gt;community.acresso.com/showthread.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It seems there is a hotfix KB article for IScript on 64bit OS &amp;nbsp;that I think will help you.&lt;/p&gt;
&lt;p&gt;Also I *believe* IS2009 doesn't use the TypeLib table anymore when doing COM Extract at build. &amp;nbsp; If you don't want to upgrade, you could a) write a postbuild step that tweaks your output MSM &amp;nbsp;or b) don't distribute merge modules, create a setup prereq instead ( since Microsoft offically says concurrent installs and third party merge modules now &amp;quot;suck&amp;quot; when it comes to servicing. )&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=641" width="1" height="1"&gt;</description></item><item><title>re: What to do when there's nothing to do?</title><link>http://gormanonline.com/blogs/msidle/archive/2008/07/01/what-to-do-when-there-s-nothing-to-do.aspx#637</link><pubDate>Fri, 08 Aug 2008 21:42:27 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:637</guid><dc:creator>Airborne Bodhi</dc:creator><description>&lt;p&gt;Hi Greg,&lt;/p&gt;
&lt;p&gt;I look around the Internet to find old friends&lt;/p&gt;
&lt;p&gt;as the world &amp;quot;gets smaller&amp;quot; on a daily basis.&lt;/p&gt;
&lt;p&gt;This then brings me to the question: are you&lt;/p&gt;
&lt;p&gt;The Greg David Gorman that at one time attended&lt;/p&gt;
&lt;p&gt;SJV? It would be great to re-connect with you&lt;/p&gt;
&lt;p&gt;if that is the case.&lt;/p&gt;
&lt;p&gt;Your Old Pal,&lt;/p&gt;
&lt;p&gt;Tommy Ward&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=637" width="1" height="1"&gt;</description></item><item><title>re: RunOnce Key needed for limited user</title><link>http://gormanonline.com/blogs/msidle/archive/2008/04/14/runonce-key-needed-for-limited-user.aspx#636</link><pubDate>Tue, 22 Jul 2008 07:51:15 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:636</guid><dc:creator>jmcfadyen</dc:creator><description>&lt;p&gt;hi Susan are you aware of Active Setup ? This could be another convenient way you can utilise a script driven user side action. &lt;/p&gt;
&lt;p&gt;This is a non windows installer function and allows execution of any command line on a per user basis. &lt;/p&gt;
&lt;p&gt;this is done by adding a key to &lt;/p&gt;
&lt;p&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup&lt;/p&gt;
&lt;p&gt;cheers, &lt;/p&gt;
&lt;p&gt;John &lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=636" width="1" height="1"&gt;</description></item><item><title>re: What to do when there's nothing to do?</title><link>http://gormanonline.com/blogs/msidle/archive/2008/07/01/what-to-do-when-there-s-nothing-to-do.aspx#634</link><pubDate>Wed, 02 Jul 2008 17:45:53 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:634</guid><dc:creator>SusanGorman</dc:creator><description>&lt;p&gt;I love the idea of a single doc for the CAs as well as putting that doc in the Admin UI sequence. Good plan!&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=634" width="1" height="1"&gt;</description></item><item><title>re: What to do when there's nothing to do?</title><link>http://gormanonline.com/blogs/msidle/archive/2008/07/01/what-to-do-when-there-s-nothing-to-do.aspx#633</link><pubDate>Wed, 02 Jul 2008 14:27:10 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:633</guid><dc:creator>HookEm</dc:creator><description>&lt;p&gt;And if you want your MSI package to meet the MS Windows Logo Certification requirements then you know it's a requirement to provide system administrators with documentation explaining what each custom action in your MSI package does (except for type 19, 35, and 50 CAs).&lt;/p&gt;
&lt;p&gt;If you use InstallShield to generate your package, they would have you create a separate text file for each CA. &amp;nbsp;I hate that approach. &amp;nbsp;I'd rather see all the CAs described in one document so I created an RTF file with a table for each CA that not only describes what each CA does, but also lists the type (broken down into the individual attribute flags such as &amp;quot;1+256+1024&amp;quot;) and where it is sequenced in each of the sequence tables.&lt;/p&gt;
&lt;p&gt;In addition, so as not to confuse the typical user who probably doesn't know anything about CAs or care what they are doing, I added a UI dialog to the Admin UI sequence that displays the RTF (similar to an EULA dialog) and allows the user running an administrative install in full UI mode to print the RTF.&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=633" width="1" height="1"&gt;</description></item><item><title>re: Common Task: Validate a Path</title><link>http://gormanonline.com/blogs/msidle/archive/2008/05/19/common-task-validate-a-path.aspx#626</link><pubDate>Tue, 20 May 2008 14:03:02 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:626</guid><dc:creator>SusanGorman</dc:creator><description>&lt;p&gt;Great info, HookEm!&lt;/p&gt;
&lt;p&gt;I checked this out and I put up a blog post commenting on this information.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_new" href="http://gormanonline.com/blogs/msidle/archive/2008/05/20/customizing-the-pathedit-and-directorycombo-controls-to-validate-path-entries.aspx"&gt;gormanonline.com/.../customizing-the-pathedit-and-directorycombo-controls-to-validate-path-entries.aspx&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=626" width="1" height="1"&gt;</description></item><item><title>Customizing the PathEdit and DirectoryCombo controls to validate path entries</title><link>http://gormanonline.com/blogs/msidle/archive/2008/05/19/common-task-validate-a-path.aspx#625</link><pubDate>Tue, 20 May 2008 13:53:58 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:625</guid><dc:creator>Lifestyle of the MSIdle</dc:creator><description>&lt;p&gt;My last post Common Tasks: Validating a Path received this comment from HookEm: Two of your 5 conditions&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=625" width="1" height="1"&gt;</description></item><item><title>re: Common Task: Validate a Path</title><link>http://gormanonline.com/blogs/msidle/archive/2008/05/19/common-task-validate-a-path.aspx#623</link><pubDate>Tue, 20 May 2008 04:19:55 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:623</guid><dc:creator>HookEm</dc:creator><description>&lt;p&gt;Two of your 5 conditions can be handled without a custom action using the native MSI controls:&lt;/p&gt;
&lt;p&gt;&amp;quot;Must be less than 200 characters in length&amp;quot;: see the Text property of the PathEdit control (&lt;a rel="nofollow" target="_new" href="http://msdn.microsoft.com/en-us/library/aa370749"&gt;msdn.microsoft.com/.../aa370749&lt;/a&gt;(VS.85).aspx)&lt;/p&gt;
&lt;p&gt;&amp;quot;must be on a fixed (local, non-removable) drive&amp;quot;: see the available hexadecimal bit flags assignable to the Attributes property of the DirectoryCombo control (&lt;a rel="nofollow" target="_new" href="http://msdn.microsoft.com/en-us/library/aa368290"&gt;msdn.microsoft.com/.../aa368290&lt;/a&gt;(VS.85).aspx)&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=623" width="1" height="1"&gt;</description></item><item><title>re: Basic Introduction to InstallShield and Windows Installer</title><link>http://gormanonline.com/blogs/msidle/archive/2008/05/02/basic-introduction-to-installshield-and-windows-installer.aspx#620</link><pubDate>Thu, 08 May 2008 12:22:45 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:620</guid><dc:creator>SusanGorman</dc:creator><description>&lt;p&gt;Totally right, Christopher.&lt;/p&gt;
&lt;p&gt;Yes, you can also use InstallScript custom actions in a Basic MSI project.&lt;/p&gt;
&lt;p&gt;The only thing it adds when you do that is InstallShield automatically embeds some run-time DLLs to the installation that it needs in order to be able to process the InstallScript.&lt;/p&gt;
&lt;p&gt;Good point. Thanks!&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=620" width="1" height="1"&gt;</description></item><item><title>re: Basic Introduction to InstallShield and Windows Installer</title><link>http://gormanonline.com/blogs/msidle/archive/2008/05/02/basic-introduction-to-installshield-and-windows-installer.aspx#619</link><pubDate>Wed, 07 May 2008 21:35:23 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:619</guid><dc:creator>Christopher Painter</dc:creator><description>&lt;p&gt;This is a nice article, but if I read it as a newbie, I'm left with the impression that there is only Basic MSI or InstallScript MSI. &amp;nbsp; The reality is you can maintain a clean Basic MSI project but insert InstallScript CA's into the ControlEvents and Sequences in the same way you insert C++ CA's. &amp;nbsp; This doesn't require the use of setup.exe, or the external UI handler. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can easily migrate your VBScript CA's to InstallScript CA's. &amp;nbsp;Other then differences between &amp;nbsp;Session.Property( property ) and MsiGetProperty( handle, property, buffer, size ) line by line comparisons of VBScript and InstallScript functions are remarkably similar in appearance. &amp;nbsp; C++ also looks alot like InstallScript except it's much more verbose as you have to write tomes of code to handle memory allocation and such.&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=619" width="1" height="1"&gt;</description></item><item><title>Basic Introduction to InstallShield and Windows Installer</title><link>http://gormanonline.com/blogs/msidle/archive/2008/05/02/basic-introduction-to-installshield-and-windows-installer.aspx#618</link><pubDate>Wed, 07 May 2008 07:56:43 GMT</pubDate><guid isPermaLink="false">45bc9128-c309-4a47-b6b1-7705e21af830:618</guid><dc:creator>InstallSite Blog</dc:creator><description>&lt;p&gt;Found a nice blog article by Susan Gorman that introduces Windows Installer and InstallShield&amp;amp;#39;s role&lt;/p&gt;
&lt;img src="http://gormanonline.com/aggbug.aspx?PostID=618" width="1" height="1"&gt;</description></item></channel></rss>