Thursday, July 31, 2008
InstallSite Swag Give Away
Monday, July 28, 2008
Official Google Blog: We knew the web was big...
I recently read an article where Steve Ballmer was mentioned:
"Earlier in the day Ballmer referred to the situation as a circular conundrum because advertisers don’t want to sell on Live Search unless there’s more people using the site, and people don’t want to search on the site unless there are more relevant ads."
Well, call me stupid but I don't get that reference. People don't visit search engines to see relevant ads, they visit it to see relevant search results which happen to have ads snuck into the result set.
Anyways Microsoft is pointlessly spending big money in this area IMO. Take a look at my StatCounter logs and you'll see that literally 92.27% of my search engine related pageloads come from Google. 6.87% come from Yahoo! and a mere .86% come from Windows Live.
I guess those were the idiots that didn't change the search provider once they upgraded to IE 7.
Anyways, here's a nice read from Google today:
Official Google Blog: We knew the web was big...: "up of one trillion intersections. So multiple times every day, we do the computational"
ack/nak: phillips medical: installation developer job opening
ack/nak: phillips medical: installation developer job opening
Wednesday, July 23, 2008
Entity Framework - No Confidence
The keyword is TRIED.
The first error message informs met hat I must have .NET 3.5 installed. Funny, it is installed. Then I get a fatal crash. Ohwell, atleast the MSI is using the ubber-cool Red motif!
Either way I did some poking around and I found this launch condition to be the culprit:
Installed OR
(DP_NETFX35_INSTALLED_VERSION >= "3.5.20904.00") and (DP_NETFX35_INSTALLED_VERSION <= "3.5.21203.00")
I seem to have .NET 3.5 SP1 ( BETA ) 3.5.30428.01. Funny, EF BETA 3 package seems to be hardwired to not run against a beta version of the framework when it's a beta package itself. The part that really threw me off is the way the externalUI is used it looked like the LaunchCondition was information and something else blew up later.
Monday, July 21, 2008
Windows 98 on Hyper-V
All fun aside, I was recently contacted by a potential client who needs an install created and tested on Windows 98! I don't know about you, but I haven't used Windows 98 in a good 6 or 7 years.
Now lately a lot has been made about Microsoft trying to kill of Windows XP, but has any one noticed how many operating systems have been killed over at MSDN Subscriber Dowloads? Windows 98 is *GONE* allegedly due to the Sun vs Microsoft Java war.
Then there is the problem that Hyper-V doesn't support Windows 98 integration components. Virtual Server 2005 is probably a better choice since it emulates an Intel 440BX/82371AB South Bridge with S3 Trio 64 video card. This is hardware that Windows 98 should be very comfortable with.
Well, here's hoping for the best. We'll see how far I get before I want to just go find an old computer off of Craigslist for this one time project.
However I'm going to give Hyper-V a try for now. I've hunted around and found a copy of Windows 98 so here's hoping for the best.
Thursday, July 17, 2008
Virtual Brownbag - Installation Testing with Hyper-V
This video discusses how to use Windows Server 2008 Hyper-V on inexpensive white-box hardware to provide a robust installation test environment. Future videos will show how this system can also provide all of the other services needed in a stand alone development environment.
The video is merely a capture of my desktop with voice overlay. Let's face it, what's going on in the presentation is what is important, not what the author looks like.
Note: Be sure to check out other videos on Hyper-V that You Tube suggests by clicking the icon in the lower right hand corner. Also, the video uploaded is small so here is a detailed screenshot of what the snapshot tree looks like (I suggest opening it in a new tab and referring to it):
Friday, July 11, 2008
Multiple Language Resource Files - Quick & Dirty
First, a couple of notes:
- The information below is probably the easiest method for a few resource files with different names only. That does not mean it is a best practice. In fact, it isn't a best practice - if you have a lot of resource files or all the resource files have the same name, then you'll want to review MSDN topic Localizing a Windows Installer Package and the available Localization Example and author the MSI accordingly (to NOT use component conditions to control what files get installed).
- If you're using merge modules, you should review the MSDN topic Authoring Multiple Language Merge Modules AND review the InstallShield topics (because IS doesn't support authoring multi-language merge modules so if you need to exclude languages at MSI build time then you would need to create a different module for each language).
- If your MSI package has UI text streams that are localized, make sure the default code page property is set appropriately, that InstallShield is set up to generate multiple language transforms (1033.mst, 1036.mst, etc.) for each language you will support, and that the database summary information stream properties for the Template Summary and Codepage Summary are set correctly.
If you do need to only install one resource file depending on the OS language, then you need to add each resource file to the merge module as a separate component and then use a component condition to evaluate the SystemLanguageID property. Another advantage of this approach is that you can localize your shortcuts, registry entries, etc. because the records in those tables are tied to a particular component. So, if you had a shortcut with French text you would assign the shortcut table record to the component with resource-fr.xml as the key file and the shortcut would only be installed when the resource-fr.xml is installed.
If having multiple resource-??.xml files on your system is a problem, you need to do the following two things:
- Go smack the application developer upside the head. S/he should have coded the application to detect the language and load the approprate resource at run time.
- Make sure that the grouping of components is conditioned such that they are all mutually exclusive. IOW, only one of the components can possibly be installed at one time.
For example, to install only the French resource file, add a component with key file resource-fr.xml and set the component condition to:
SystemLanguageID=1036
The component will only be installed on systems where the System Locale Identifier Constant indicates French (0x040c hex - 1036 decimal).
If you need to install the French resource on other French locales (such as Belgium, Canada, Monaco, etc.) you would need to expand the condition to:
SystemLanguageID=1036 OR SystemLanguageID=2060 OR SystemLanguageID=3084 OR SystemLanaguageID=6156
Also, whatever your default language should be (English?) then you want the condition for the component that contains that resource file to evaluate so that it installs on all systems that don't match any of the conditions for the other resource components. So if you only had French (with the previously mentioned locales) and English and you wanted English to be the default then you would set the condition for the English component to:
SystemLanguageID<>1036 AND SystemLanguageID<>2060 AND SystemLanguageID<>3084 AND SystemLanguageID<>6156
...and NOT to:
SystemLanguageID=1033
...since the latter will only install on systems where the local is set to English-US (IOW, any other system not covered by the other component conditions would never get any resource file installed).
A couple of other issues to consider:
- If your MSI can be installed per-user, you will also want to consider conditioning the components using the UserLanguageID property as that can be different from the SystemLanguageID (a user can set their user locale to 'French' when the system locale is set English so they see French and other users of the same system see English).
- To cover the scenario where your user installs under one language, changes the language settings, and then run's 'repair'. Make sure you set the msidbComponentAttributesTransitive attribute flags for your components with conditional statements so the conditions get reevaluated during a maintenance mode installation. This would allow the originally installed language component to be removed and the new language component installed for this scenario.