tag:blogger.com,1999:blog-9537945.post1434713641598981691..comments2007-08-07T17:40:25.304-05:00Comments on DeploymentEngineering.com - The Blog: .NET CA's are NOT (always) EvilChristopher Painterhttp://www.blogger.com/profile/12167478740431444267noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-9537945.post-59058215387314417382007-08-07T17:40:00.000-05:002007-08-07T17:40:00.000-05:00I look forward to the day where I can seamlessly u...I look forward to the day where I can seamlessly use the best of both WiX and InstallShield. I like the concept of WiX, but I don't like the current state of editing tools for WiX.<BR/><BR/>I mostly use Orca for `sneak and peek` and the occasional ad-hoc validation of a package. On occassion I've actually used it for authoring in conjunction with MSI2XML / XML2MSI. Examining raw table data is ok for trying to identify a problem or `how something works`.... but actually authoring it from scratch is a royal pain. WiX is better, but still the same general problem just easier to read. <BR/><BR/>Call me lazy, but I like designers... :)Christopher Painterhttp://www.blogger.com/profile/12167478740431444267noreply@blogger.comtag:blogger.com,1999:blog-9537945.post-47767530310296845552007-08-07T17:28:00.000-05:002007-08-07T17:28:00.000-05:00I am still not the biggest fan. That being said, ...I am still not the biggest fan. That being said, they have a great interoperability with the .NET Framework. If it weren't such a PITA, I would stick to Orca. ;-)<BR/><BR/>My current employer is an InstallShield / WiX shop. Personally, I prefer to work in WiX, but InstallShield does some neat things as well.<BR/><BR/>I can't stand VB.NET either, but I'd sure help you out with something if you have a question.AJhttp://www.blogger.com/profile/16538587727045104430noreply@blogger.comtag:blogger.com,1999:blog-9537945.post-11053640113110643872007-08-07T16:45:00.000-05:002007-08-07T16:45:00.000-05:00AJ-About 2 years ago you once said:"Wow, if Instal...AJ-<BR/><BR/>About 2 years ago you once said:<BR/><BR/>"Wow, if InstallShield is the only option we have for Windows Installer, we are all in a lot of trouble. <BR/><BR/>I might be biased, but it's sad really that InstallShield and Windows Installations are synonymous with each other. ...considering IMHO it is one of the worst installer products on the market."<BR/><BR/>What is your feeling about InstallShield these days?Christopher Painterhttp://www.blogger.com/profile/12167478740431444267noreply@blogger.comtag:blogger.com,1999:blog-9537945.post-44750383716738641112007-08-07T15:48:00.000-05:002007-08-07T15:48:00.000-05:00I've also noticed that in InstallShield 2008 CoCre...I've also noticed that in InstallShield 2008 CoCreateObjectDotNet is already deprecated. They have replaced it with a new function ( sorry, InstallScript doesn't suport overloads ) called DotNetCoCreateObject(). It takes an additional argument of AppDomain.<BR/><BR/>There is also a new function called DotNetUnloadAppDomain. I think this basically does what AJ is doing.Christopher Painterhttp://www.blogger.com/profile/12167478740431444267noreply@blogger.comtag:blogger.com,1999:blog-9537945.post-27574799674747296822007-08-07T15:07:00.000-05:002007-08-07T15:07:00.000-05:00No doubt. InstallShield's implementation of CoCre...No doubt. InstallShield's implementation of CoCreateObjectDotNet has been a lifesaver to me many times. A little tip for anyone using managed custom actions. As many people point out, managed code is "sticky". If you are using managed code custom actions in Windows Installer, make sure you free the module so that the next time you use it, it doesn't use the same one that is already in memory. I have found that when this happens, the module in memory has often held on to its properties.<BR/><BR/>Add this define to the top of your InstallScript:<BR/>prototype void ole32.CoFreeLibrary( byval int );<BR/><BR/>Then after you call the custom action, set the object to NOTHING and free the module using the following (hModule is an INT):<BR/>hModule = GetModuleHandle( MY_MC_CA );<BR/> if( !hModule ) then<BR/> //We can't get the handle to the module<BR/> else<BR/> CoFreeLibrary( hModule );<BR/> endif;AJhttp://www.blogger.com/profile/16538587727045104430noreply@blogger.com