Windows Installer (March 15, 2005)

Posted: March 15, 2005

Please note: Portions of this transcript have been edited for clarity

Introduction

Tyler [MSFT] (Moderator):
Welcome to today's chat. The topic is: Windows Installer Chat: General Q & A.
We are pleased to welcome our Experts for today's chat. I will have them introduce themselves now.

Tyler [MSFT] (Moderator):
My name is Tyler Robinson and I am the Program Manager for the Windows Installer.

Hem [MSFT] (Expert):
Hi, I am Hemchander, a developer on the Windows Installer Team. My areas of focus include installer performance and patching.

Ken [MSFT] (Expert):
Hi, my name is Ken and I am a tester on the Windows Installer Team.

Carolyn [MSFT] (Expert):
Hello! I'm Carolyn, the development lead for Windows Installer.

Eugen [MSFT] (Expert):
I'm Eugen and am a developer working on Windows Installer.

Robert (Expert):
Hi, I'm Robert, Setup Build developer in Visual Studio and WiX Dark Developer

Tyler [MSFT] (Moderator):
Let's begin the chat. We welcome you to begin submitting your questions for our Experts. If you have attended previous chats, you may be accustomed to prefacing your question with a Q:, there is no need to do that any longer. Our new chat system will automatically preface your question with a Q:. (Be sure to use the Question radio button.)

Start of Chat

Carolyn [MSFT] (Expert):
Q: what window installer version are we talking about ?
A: Pretty much any version. Feel free to ask questions about 1.X, 2.0, or 3.0.

Robert (Expert):
Q: Where can I find information on making the install package check if the .Net Framework is present, and install it if necessary (or for that matter do any kind of options like to install this module but not that module, etc)?
A: Sorry, are you asking for a packaging solution that includes dot net formework support? If yes, see Use the Visual Studio 2005 Bootstrapper to Kick-Start Your Installation https://msdn.microsoft.com/msdnmag/issues/04/10/Bootstrapper/

Carolyn [MSFT] (Expert):
Q: Are there any future planed updates to Wix?
A: Yes. WIX is an open-source community project. You can find details about the WIX project at https://sourceforge.net/projects/wix/

Tyler [MSFT] (Moderator):
Q: Are there any plans for a Windows Installer MSI Certification Program (something like Microsoft Certified Packaging Specialist)?
A: There are currently no plans for a program to certify developers or administrators who work with MSI. We are working on ways to increase the prominence of MSI in the Windows Logo Program, but this will focus on the MSI packages themselves and not the people who work with them.

Ken [MSFT] (Expert):
Q: how can i check the MDAC user machine version from inside windows installer ?
A: There is no built in property within Windows Installer to detect the version of MDAC on the user's machine. However, you could find this information in the registry and set this as a property within the package. More information on how to detect the version of MDAC could be found at https://support.microsoft.com/default.aspx?kbid=301202.

Hem [MSFT] (Expert):
Q: Where can I find info on making a multi-tier web-app installer?
A: It would depend on your requirements. But a good starting point sample that walks you through the process of authoring an internet download bootstrapper for MSI is documented @ https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/internet_download_bootstrapping.asp

Tyler [MSFT] (Moderator):
Just a reminder that today's chat topic is Windows Installer Chat: General Q & A. Please keep your questions on-topic and use the submit a question radio button to submit a question to our experts.

Eugen [MSFT] (Expert):
Q: When creating an .MSI file, is there a limit as to the size of any given file that is included in the .msi? (Oops, sorry, I forgot to click 'submit a question')
A: The only limitation to the file size is it should not exceed the DoubleInteger type's limits (please see the File table topic in the doc). Please be aware that files that will be actually stored in cabinets inside the .MSI file, will increase the size of the .MSI file thus making it more difficult to deploy over networks/internet.

Robert (Expert):
Q: Are there any plans to release more comprehensive documentation on MSI and/or WiX?
A: Yes, one can reference a ZIP file in ones MSI. No, MSI does not know how to unzip files packed in the ZIP. MSI natively knows how to unpack files in CABs and in typical WiX complementary fashion WiX natively knows how to pack them for you.

Carolyn [MSFT] (Expert):
Q: Why do docs say the advertise sequences cannot make use the LaunchCondition action? Shouldn't authors of MSI be able to completely prevent advertisation of products on unsupported platforms? (e.g. install a driver product for 64bit on 9x?)
A: You have to remember that the AdvertiseExecuteSequence table is processed in two different ways. The first method is if you locally advertise on the machine (like using msiexec /jm package.msi). The second method is through deployment. For Group Policy deployment, an advertise script is created on the deployment machine and then deployed to all client machines. If the deployment machine doesn't closely match the configuration of the client machine, you can end up creating an advertise script that won't work well. Even if the product is advertised, the LaunchCondition in the Install*Sequence tables will prevent its installation. The 2nd method is the reason for the documentation.

Tyler [MSFT] (Moderator):
Q: are there any releases of WI planned between 3.1 and 4.0?
A: MSI 3.1 ships with Windows Server 2003 SP1 (and down-level on Windows 2000 SP3+ and all flavors of Windows XP) is the last planned released before MSI 4.0, which will be part of Windows codename Longhorn.

Robert (Expert):
Sorry henry, you're answer is coming... I got my wires crossed between questions

Carolyn [MSFT] (Expert):
Q: I've been using 2.0 until now: i'm planning to go to 3.0. What are the new functionalities?
A: MSI 3.0 is all about application servicing. All of the new features (sequencing patches, smaller patches, applying multiple patches, etc.) deal with servicing through MSPs. You can find a summary of the new features in the KB article for the redist: https://support.microsoft.com/Default.aspx?kbid=884016

Robert (Expert):
Q: Can i zip files before adding them to .msi using wix
A: Yes, one can reference a ZIP file in ones MSI. No, MSI does not know how to unzip files packed in the ZIP. MSI natively knows how to unpack files in CABs and in typical WiX complementary fashion WiX natively knows how to pack them for you.

Tyler [MSFT] (Moderator):
Q: i have a wmp question
A: The topic of today's chat is Windows Installer: General Q & A, so the experts will not be taking questions relating to WMP.

Eugen [MSFT] (Expert):
Q: I'm thinking more along the line of hundreds of MB for a single file to be included as part of the msi. Will that cause a problem?
A: No, it should not create problems.

Hem [MSFT] (Expert):
Q: If we create a patch between two msi packages that both have an embedded language transform.Do you expect the patch to include the differences in these embedded transforms (ex: a Correction in a translation is introduced with the new embedded transform)
A: A patch consists of transforms that summarize the differences between target and upgraded (MSI) images and payload (file diffs). Now, these transforms are created using the MsiDatabaseGenerateTransform. This API can see difference between the tables in each of the MSI. If the transforms are not part of some table in the MSI, the transform wouldn't have that information. As a result, the patch also wouldn't carry that information.

Carolyn [MSFT] (Expert):
Q: Carolyn: re: A: Still - shouldn't the GP deployment permit failure and log appropriately? This incorrect advertisation causes lots of bad assumptions (such as the ability to remove the product from a unsupported platform).
A: That's why the guidelines for Group Policy deployment recommend that you have parity between the deployment machine and the client machine as far as configuration goes. There's certainly room for improvement with Group Policy deployment (and perhaps having it adapt better to heterogenous clients)

Carolyn [MSFT] (Expert):
Q: I use GP to deploy a lot of software and updates on our network - Why can't I (easily) deploy certain prerequisites of MSI files/why do MS push the use of bootstraps to install MDAC/.NET and even MSI 3.0
A: Group Policy has it's own limitations as to what it permits. In particular it doesn't support chaining of MSI packages or ordering of MSI packages. Some deployment limitations in Group Policy are handled by SMS and the upcoming Windows Update services release. (MSI 3.0 is an update.exe package as it's an update to a system component. It's deployment would be through Windows Update services). Windows Update Services is designed to work with Active Directory deployments.

Tyler [MSFT] (Moderator):
Q: there is some difference between the windows installer inside windows 98 against windows xp ?
A: Windows 98 actually did not to include the Windows Installer. The first Win9x platform to include the Windows Installer was Windows ME. InstallSite has a great FAQ that outlines what versions of the Windows Installer shipped on what OS's at https://www.installsite.org/pages/en/msifaq/a/1001.htm ... If you want to know the differences between each Windows Installer version, see the Windows Installer Documentation on MSDN.

Tyler [MSFT] (Moderator):
Q: Any idea when the redistributable for MSI 3.1 will be available? It would be nice to include it in our upcomming release.
A: We just made the Windows Installer 3.1 Release Candidate available through our beta program. We plan to have the final redistributable available by the end of April.

Carolyn [MSFT] (Expert):
Q: I use GP to deploy a lot of software and updates on our network - Will there be an update to GP to support other install mechanisms (ClickOnce)?
A: That question is best asked of the Group Policy team :) As far as ClickOnce goes, it's design is no touch deployment and non-impactful setups -- meaning that you shouldn't require administrative privileges to install a ClickOnce application.

Hem [MSFT] (Expert):
Q: Using msistuff.exe in the platform SDK I can preset many aspects of the installer (like features and public properties) by using the -p option. Is there any way to pass msiexec options to msistuff to have them as the default? I.e. logging/silent mode/etc
A: Unfortuately, MSIStuff.exe sample that goes with SDK doesn't support all the command-line options of msiexec. You might have noticed that it does let you set properties via command-line. However, you can modify the sample to your needs so that it can handle the command-line options that you are interested in.

Robert (Expert):
Q: Robert, my question was on help documentation. I'd like to know if more complete documentation will be made available for Windows Installer, and separately, WiX.
A: Sorry about that confusing first anwer. Got my wires crossed. This is really a two part question: first WiX (the easy part, for me, at least). In the binaries you'll find on https://sourceforge.net/projects/wix/, there is a wix.chm that has recently been updated with a lot more content. There is also a tutorial on the WiX wiki (google WiX tutorial). Additionally given it's shared source, on can read the code. Finally there's the WiX community at wix-users@lists.sourceforge.net which is growing and has a lot of helpful experts (hey you could be one too ;^). Second, the MSI documentation. The "bible" (as Rob, benovolent dictator of WiX, likes to call it) is the MSI sdk: Platform SDK: Windows Installer https://msdn.microsoft.com/library/en-us/msi/setup/about_windows_installer.asp.Beyond that there is the Windows MSI community site that will be posted at the end of the chat. Finally if all those avenues fail to get you what you need, try msiwish@microsoft.com to suggest how we might improve our documentation.

Tyler [MSFT] (Moderator):
Q: You mentioned pushing MSI within the logo guidelines - can you confirm if/can I request that this will also require the ability to deploy using GP - a lot of (esp Installshield scripted) installers prevent advertising/deployment as you must use a bootstrap
A: We're still in the early stages of outlining the logo guidelines for the next Windows release, so I can't confirm id that will definately be a requirement, but we are definately thinking along the lines of ensuring that the install does the right thing for both corporate and home users. We would love your feedback about what should be included, so if you have any ideas please send them to MSIWISH@microsoft.com (This is also the general email alias you should use to send any feature requests to the MSI team.)

Carolyn [MSFT] (Expert):
Q: re: Carolyn A: I see. The global machine runs generates a generic script. Is this then a GP deploy or MSI issue? Many more customers are using this now and it seems inherently broken in some aspects.
A: I'd say the limitation is on the Group Policy side, but the design was due in part to MSI. The primary reason advertise scripts are used is because they are much smaller and can be delivered easily to the sysvol. That's as opposed to using an MSI. However, you could envision a scenario where rather than generating a script on the deployment machine (global machine as you call it), you create the script when the software policy is pushed down to the client. This would be a one-time operation (so you'd only have the time impact just once) but still have the small script available to use for advertisement (which is necessary for per-user managed installations). I suppose the other option would be to have more dynamic scripts as well. But yes, there is a limitation here. If advertisable data is conditionalized based upon machine hardware or even OS versions, you can see potential problems with deployment if you don't have the same clients.

Tyler [MSFT] (Moderator):
Q: Any releaseable ideas for the planned features in WI 4.x?
A: Unfortunately, we can't discuss the planned features in MSI 4.0 right now. However, if you have feature requests please send them to MSIWISH@microsoft.com

Ken [MSFT] (Expert):
Q: can i use msiexec from windows xp ?
A: Yes you can.

Tyler [MSFT] (Moderator):
For those of you who may have arrived late, the topic of today's chat is Windows Installer: General Q & A. Please be sure to submit your questions to our experts by selecting the submit a question radio button.

Robert (Expert):
Q: 1) Which is easier to develop installation packages: Bootstrapper; or WIX? 2) Which is more powerfull?
A: Not sure I understand the question but here's a shot. Please redirect as needed. First, WiX is about building MSIs and MSIs are about building a single package that contains everything that a install represents. Second, bootstrappers are about stitching together seperate packages into a single experiance. For this, the only MSFT product I know of is: Use the Visual Studio 2005 Bootstrapper to Kick-Start Your Installation https://msdn.microsoft.com/msdnmag/issues/04/10/Bootstrapper/. Bootstrapper problems are hard as things like reboots, ui, servicing, and costing present some distinct challenges to bootstrapping. Which you use really depends on the problem you are trying to solve. Does that answer your question?

Tyler [MSFT] (Moderator):
Q: there is some diferences to make a installer for a network machine users again an individual user machine ?
A: I'm not sure I understand the question. Can you please ask the question again and elaborate? Thanks.

Carolyn [MSFT] (Expert):
Q: When a component is no longer needed, is it safe to completely remove it, or should we remove the files and keep it empty ?
A: You can remove the component in a major upgrade (ProductCode changes), but you can't remove the component in a small/minor update. For small/minor updates, you should leave the component present. It's possible you could consider marking the component as a transitive component with a condition that'll evaluate to false and therefore have the component uninstalled. Alternatively if you remove files from a component, be sure to follow the component rules guidelines. It shouldn't be a component that is shared among other products. And if you remove files, you should make sure that you add entries to the RemoveFiles table to delete the files so that they are not orphaned.

Robert (Expert):
Q: Hi. I have a Visual Studio 2005 Express question, and am hoping Robert can give me answer or tell me where to get one. How do I connect MS Access 2002 to SQL Server 2005 Beta?
A: Sorry, are you asking how to install SQL Express (available with VS distributions and at microsoft.com) or are you just asking about connecting to the db? For the former question, I believe the answer is Use the Visual Studio 2005 Bootstrapper to Kick-Start Your Installation https://msdn.microsoft.com/msdnmag/issues/04/10/Bootstrapper/
For the latter, I'm not the most sophisticated framework developer but I've found the Microsoft.Data.SqlClient (and it's peers) solve my problems. Here's a snippit (assuming the client ui cooperates)

Tyler [MSFT] (Moderator):
Q: Are there any plans to add Windows Installer 3.x support to Windows 2000 Workstation?
A: The Windows Installer 3.0 redistributable (available from https://www.microsoft.com/downloads/details.aspx?FamilyID=5fbc5470-b259-4733-a914-a956122e08e8&displaylang=en) can be installed on Windows 2000 SP3 and above.

Carolyn [MSFT] (Expert):
Q: With web installs (source = https://) how is the source url defined? Can I set the source to https://myserver/givemeafile.asp?filename= and msi will append the filepath/name to the url or will this only work with files stored statically on a 'normal' site?
A: The source URL is the URL path to the package you provide to Windows Installer. So if it's https://myserver/myapplication/package.msi, the installer considers the source location to be https://myserver/myapplication. It's the full path to the package minus the package name.

Tyler [MSFT] (Moderator):
We have about 30 minutes left in the chat. Just a reminder that if you wish to submit a question to our experts please use the submit a question radiobutton otherwise they will not see the questions! Please keep the questions coming. Thanks. :)

Carolyn [MSFT] (Expert):
"Adian Accinelli". The x64 and 32 bit is accounted for today in Group Policy. The Installer provides a simulation mode which Group Policy takes advantage of that allows you to simulate an architecture platform when generating an advertise script. Thus you could use a x86 deployment box to deploy to x64 clients (or vice versa).

Eugen [MSFT] (Expert):
Q: Can I use MSI technology to install Printer Drivers? are there any logo reuirement restrictions using this way?
A: Unfortunately, Windows Installer does not support the installation of drivers.

Hem [MSFT] (Expert):
Q: Is there any way to overwrite the update rules for non-versioned files? What I want to do is to update files from the previous installation only if the user has modified them?
A: If you checked out the file versioing rules documented @ https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/file_versioning_rules.asp you'd realize that for non-versioned files, if the file is modified the file wouldn't be updated if REINSTALLMODE=omus. The reason for not letting users do that is because Windows Installer treats modified files as user data and it doesn't like to modify user data during an app install. If you, as a setup author know that this file is not user data and would defenitely want to update the file, then add the file entry to RemoveFile table so that the file would be removed and FileCopy operations decide to install the file from the MSI.

Tyler [MSFT] (Moderator):
Q: well , If i wish install the same program in many machines in a network, how can i check that its have the latest version to keep updated ?
A: Ah, I understand now. :) That's really a function of your deployment technology (SMS, Group Policy, etc ...) and not the Windows Installer. Windows Installer just handles installing/updating the package on the machine once it is told to do so. Your deployment technology handles the part of getting the package to the appropriate machines and ensuring that they are up to date.

Robert (Expert):
Q: Hi. I have a Visual Studio 2005 Express question, and am hoping Robert can give me answer or tell me where to get one. How do I connect MS Access 2002 to SQL Server 2005 Beta?
A: here's how to get started
using System.Data;using System.Data.SqlClient;

string connectionString = String.Concat("Data Source=", this.serverName, ";" + "Integrated Security=SSPI;Initial Catalog=", this.databaseName);SqlConnection fldbConn = new SqlConnection(connectionString);fldbConn.Open();SqlCommand catCMD = new SqlCommand("sp_help", fldbConn);

Tyler [MSFT] (Moderator):
Q: Ummm. did you answer my follow-up question re. the installer for dumash 7.0? (sorry, was disconnected)
A: This question is really outside the scope of today's chat.

Carolyn [MSFT] (Expert):
Q: Thanks. I was confused by the failure to mention Windows 2000 Workstation.
A: Actually, Windows 2000 is mentioned as a supported platform on that documentation page. It doesn't differentiate between workstation and server. There is, however, a service pack minimum for Windows 2000. "Windows Installer 3.0 requires Windows Server 2003, Windows XP, or Windows 2000 Server SP3"

Robert (Expert):
Q: Hi. I have a Visual Studio 2005 Express question, and am hoping Robert can give me answer or tell me where to get one. How do I connect MS Access 2002 to SQL Server 2005 Beta?
A: you'll need to traverse the record and do operations based off data type (sorry lots of cases left out for chat brevity)
for (int i = 0; i < myReader.FieldCount;i++)
{
if (!myReader.IsDBNull(i))
{
switch (myReader.GetDataTypeName(i))
{
case "bit":
row = string.Concat(row, " ", myReader.GetName(i), "=\"", myReader.GetBoolean(i), "\"");
break;
}}}

Tyler [MSFT] (Moderator):
Q: Are there any plans to have versioning rules for unversioned files enhanced so that it does more than compare the Create and Modify dates of the target file? For instance: such that a newer yet unmodified file from install B won't be overwritten by an
A: We have had some talk about this but have not made any commitment to modify the rules. We would love your feedback and thoughts on this topic! Please send to MSIWISH@microsoft.com ... Thank you.

Robert (Expert):
Q: Hi. I have a Visual Studio 2005 Express question, and am hoping Robert can give me answer or tell me where to get one. How do I connect MS Access 2002 to SQL Server 2005 Beta?
A: and don't forget to close up. myReader.Close();
fldbConn.Close();

Eugen [MSFT] (Expert):
Q: With MSI 3.0 do i have an "AlwaysOverwrite" option?
A: I'm not sure I understand your question. Will you please elaborate a bit?

Carolyn [MSFT] (Expert):
Q: Web install follow up - what source location would WI assume if the package was https://myserver/downloads/dl.asp?fileid=1234.msi where dl.asp streamed the msi file from some source or dynamically created it?
A: The general recommendation is to provide the actual URL path with no redirection. The Installer doesn't translate redirection or dynamic creation. I can't say for certain, but I'd venture a guess that if that's the path you provided to msiexec, it would assume the source was https://myserver/downloads.

Tyler [MSFT] (Moderator):
Q: and if the installer program is keep inside of a network server folder, the installer can check if there is a new version of the installer program at login to network ?
A: No you would have to have some sort of process or tool that does this outside of the MSI file.

rajeshk [MSFT] (Expert):
Q: is there a way to add a line return to the Target field of a Type 19 Custom Action?
A: No you can't have line breaks.

Carolyn [MSFT] (Expert):
Q: I have a custom action in a C++ .DLL. How do I 1) Add a line the log file generated by msiexec? 2) How do I display a modal dialog to the user? I have tried several sequences including PMSIHANDLE hRecord = ::MsiCreateRecord(1);
A: (1) Use the MsiProcessMessage API and the message type INSTALLMESSAGE_INFO to log a line to the log file. (2) If you're displaying UI, be sure to respect the UI level of the installation. If you want to just display a message box, use the MsiProcessMessage API as well with the relevant message type (eg. INSTALLMESSAGE_USER). If you use MsiProcessMessage, the Installer automatically adjusts the response based upon the UI level. Be sure to specify a default button as well for the case where there's no UI.

Hem [MSFT] (Expert):
Q: Re: Hem : If the patch can't get the differences between the embedded transforms. Then What is the best way to send fixes to UI translation through patches. How can we do that?
A: You will have to generate a patch that works on the MSI packages with the transforms applied. The assumption here is that the user would apply the transforms to the MSI when installed on to his/her box. For example, you have target image T1.msi that carried Tr1.mst, Tr2.mst and Upgrade Image U1.msi that carried Tr3.mst and Tr4.mst. Now apply the transfroms to corresponding images and create a patch for those images. i.e, T1+Tr1.msi and T1+Tr2.msi will be the target images in your PCP and U1+Tr3.msi and U1+Tr4.msi will be the upgrade images. Now, your patch will apply to all possible user installation combinations.

Tyler [MSFT] (Moderator):
Q: Is OneClickInstall in the scope of this discussion? If Yes, could you point me to the URL for more info?
A: Do you mean ClickOnce? If so https://msdn.microsoft.com/smartclient/understanding/windowsforms/2.0/features/clickonce.aspx has the information you're looking for. If you really do mean OneClickInstall then OneClickInstall is a technology developed by InstallShield (https://www.installshield.com) several years ago. Both are outside of the scope of this chat, however.

Ken [MSFT] (Expert):
Q: I have another custom action in a C++ .DLL that is invoked by a "DoAction". The CA changes a PUBLIC property that is the value of an edit control. How do I refresh the "edit control" on the parent dialog with the new value of the PUBLIC property once
A: Yes it is possible to add a new component which will install in the subfolder of an existing component. You'd have to make the correct authoring in the directory table to support this.

rajeshk [MSFT] (Expert):
Q: The custom action is invoked via a "DoAction". The logging has always worked when the CA is not invoked from a "DoAction". What is special about "DoAction" with respect to MsiProcessMessage?
A: Custom actions launched by a DoAction ControlEvent can send messages with the "Message" method but cannot send a message with MsiProcessMessage. So only script custom actions can send messages using "Message" metod. C++ Dll custom actions cannot use MsiProcessMEssage

Robert (Expert):
Q: That clears things up a bit. So, when you add a new 'Setup Wizard' project to a solution, is that all I need to do to create the MSI? Is that the same as using something like WiX?
A: Yeah, you would have to ask that question, wouldn't you ;^). I don't claim speak directly for either technology but here's how I think about it. The Visual Studio Setup Wizard is about giving a base user, VS calls this user Mort internally, some simple UI to be able to deploy their 100 line VB app with the 50+ megs of dot net framework and other dependencies. For developers with a more richer needs, VS calls this user Elvis, the Visual Studio Setup Wizard starts to show holes and seems as there are many more things that one can do with MSI than one can express well in a wizard experiance. When Elvis users start to get frustrated with Visual Studio Setup Wizard, they start looking around for another solution and WiX just happens to be one. Part of the "goodness" users report from dark.exe (the WiX decompiler) is that it decompiles the MSI you have been able to build so far and then lets you do further tweaks directly in XML. Dark isn't perfect by any means but it has enabled folks to solve their problems

Carolyn [MSFT] (Expert):
Q: Regarding authoring MSI files for use with MUI versions of Windows (XP+). I am looking at inserting MUI tags (@filepath,-Id) directly into the MSI tables for shortcut tooltips, progids etc. Anyone have any suggestions or limitations related to this?
A: For shortcuts, it'll work for the tool tip by authoring directly into the Shortcut.Description column. However, the @filepath requires a full file path. The limitation there is that the column is literal text, so you can't use property references -- so it's difficult to provide the full path. You can use environment variables like %windir%\system32\msi.dll,-1 which would work but I've been unable in private testing to get the shell to work with %ProgramFiles%\MyApplication\resource.dll. It does work for the %windir% reference. As for Verbs, use the Registry table to add the MUIVerb value.

Eugen [MSFT] (Expert):
Q: Eugen, i would like to always overwrite an unversioned file (eg. .txt) without necessarily removing it before.
A: I've noticed that Stefan Krueger answered this.

Carolyn [MSFT] (Expert):
Q: when using MessageBox within a C++ custom action DLL it's very unpredictable where the focus will be. Parent MSI dlg or MessageBox. Is there a way to control this?
A: Why not use MsiProcessMessage with INSTALLMESSAGE_USER to display the message box rather than calling the MessageBox API directly? That way the focus is correctly assigned to the Install UI.

Carolyn [MSFT] (Expert):
Q: Thanks Carolyn, you'll notice it explicitly states "Windows 2000 Server" in the line you've quoted, where it generally states "Windows 2000" later in the same line for MSI 2.0. This caused my doubt.
A: Ah, I see. I'll let the technical doc writer know about that and have it fixed up. Thanks for the report.

Tyler [MSFT] (Moderator):
Q: RE: Q: shortfilenames. I ask this because there is a fundamental flaw in the handling of these entries. I've come across problems in situations of installs and patching (where shortname in MSI is not shortname on disk) and installer ends up shooting...
A: Can you please ask the full question again? Thank you.

Carolyn [MSFT] (Expert):
Q: is there a way to change the return code from a TYPE 19 CA to return something else to Add/Remove programs? the "Fatal Error During Installation" is harsh and incorrect during uninstall.
A: No. You can't change the return code from a Type 19 custom action.

Ken [MSFT] (Expert):
Q: I know it's possible to add new components to existing features (wind windows installer 2.0) that will be deployed on minor upgrade. Is it possible to add a new component that deploys to a new (needs to be created at runtime) subfolder of an existing one?
A: Yes it is possible to add a new component which will install in the subfolder of an existing component. You'd have to make the correct authoring in the directory table to support this.

Tyler [MSFT] (Moderator):
We have about 10 minutes remaining in the chat. Please continue to sumit your questions to our experts using the submit a question radio button. Thanks.

Hem [MSFT] (Expert):
Q: To Hem: I understand the mechanism of putting file in the RemoveFile table but the installation has more than 1000 files and I was trying to find ways to make it a little more efficient.
A: Hmm...Well disregarding user modifications for 1000s of files might not be what the user wants. You might want to check on that requirement. If you are sure to disregard, then you'll have replicate the entries from the File table. Installation time-wise it doesn't seem like an inefficient solution (I mean delete and then install). But, I understand the pain in authoring the RemoveFile table.

Robert (Expert):
Q: Is there a way to make MSXML 4.0 MSM install permanently? even after uninstalling my product?
A: First, in general, you don't want to do as it leaves a system dirty, thus violates Windows logo, and that's benerally bad for ISV software. Second, assuming you're an ISV that's concerned about logo or solving another class of problems (say a corp admin, or data center deployment), the best way I can think of to do this is to build a MSI that contains just the MSM you want permanent and then mark the package ARPNOREMOVE . Third, there is still a chance the files will get removed from the system so the best practice, for users at least, is always to have a dependency check inside your binary code, either in the idel loop or in the exception code path.

Hem [MSFT] (Expert):
Q: MSI Package Validation with darice.cub module (included with Windows Installer SDK) may not ensure compliance with all widely accepted Best Practices in MSI Scripting. Any plans to release an enhanced version of the same before MSI 4.0?
A: That is a definite work item for our team.

Robert (Expert):
Q: Is there a way to make MSXML 4.0 MSM install permanently? even after uninstalling my product?
A: First, in general, you don't want to do as it leaves a system dirty, thus violates Windows logo, and that's benerally bad for ISV software. Second, assuming you're an ISV that's concerned about logo or solving another class of problems (say a corp admin, or data center deployment), the best way I can think of to do this is to build a MSI that contains just the MSM you want permanent and then mark the package ARPNOREMOVE . Third, there is still a chance the files will get removed from the system so the best practice, for users at least, is always to have a dependency check inside your binary code, either in the idel loop or in the exception code path.

Tyler [MSFT] (Moderator):
As a reminder, you only need to ask a question once. Our experts will do their best to answer all of your questions.

Ken [MSFT] (Expert):
Q: If we apply a transform to an msi package. A mst file is created in the temp directory and is never deleted not even after a reboot. Howeve, The msi package that is created in the temp is deleted.Verbose log mentions an error of 32(file is in use)any idea?
A: Without examining the log file itself, it is hard to pinpoint which file MSI is unable to delete causing the error. You could post your log file to our news group for further analysis

Carolyn [MSFT] (Expert):
Q: Why keep shortfilename requirements in v4+ of MSI? I understand the need if filesystem doesn't support I think it is strange that we as MSI authors have to guess what the 8.3 name is going to be when it really is determined at install time. contd.
A: Support for shortfilenames cannot just be removed from MSI. There are application compatibility concerns in that the Installer can't make changes that can result in the failure of previously released installations. Additionally there are still system policies that enforce the use of short filenames, even if the disk supports long file names. As for URLs, right now that's the default requirement for Windows Installer -- that all URL based installations use short file names.

rajeshk [MSFT] (Expert):
Q: In other words, what is the sequence of Msi API calls needed to display a MSI modal dialog using MsiProcessMessage in a C++ custom action that is invoked via "DoAction" from a button on a MSI dialog?
A: Currently in the scenario of "DoAction" invoking a CA, it is not possible to use MsiProcessMessage. This limitation exists for Windows Server 2003 and higher. The only supported way is to use the automation method "Message" from a script custom action.

Eugen [MSFT] (Expert):
Q: Can you explain in detail why applying a patch to an administrative installation is not recommended (https://msdn.microsoft.com/library/en-us/msi/setup/uninstallable_patches.asp)? This seems like a reversal of strategy.
A: Patching an administrative installation is not desirable because it will cause prior installations made from the admin image to get out of sync with the patched administrative image.

Tyler [MSFT] (Moderator):
Q: windows installer will be included in longhorn ?
A: Yes -- version 4.0 of Windows Installer is planned to be part of Windows codename Longhorn.

Tyler [MSFT] (Moderator):
Q: I thought that since I couldn't use the program that I had taken it off so I downloaded the 1st disc and it is leting me use the material without asking for the key. I am confussed. Can you help me?
A: This question is outside the scope of today's chat.

Tyler [MSFT] (Moderator):
We have about 5 minutes left in today's chat. If you have any final questions please submit them now.

Carolyn [MSFT] (Expert):
Q: Does not work. PMSIHANDLE hRecord = ::MsiCreateRecord(1);
MsiRecordSetString (hRecord, 0, szTemp);
MsiProcessMessage (hInstall, INSTALLMESSAGE_INFO, hRecord);
A: If this is in reference to previous questions that relate to a DoAction control event, then the answer is that regardless of your attempts at MsiProcessMessage calls, they are blocked from a custom action launched in that manner. If your custom action was outside of the DoAction control event launch scenario, then the message will be logged.

Robert (Expert):
Q: when validating against darice why does a component without a key file not throw an error?
A: I've personally found this is one of those non-obvious things when reading the platform SDK: ICE18 [Windows Installer] https://msdn.microsoft.com/library/en-us/msi/setup/ice18.asp. I've found ICE18 does catch this case but the instructions in the ICE assume you meant for KeyPath to choose the CreateFolder path. In defense of the ICE, they had to guess one way or the other. If you'd still like the topic ammended, consider sending the suggestion to msiwish@microsoft.com as we're always looking to improve our documentation.

Ken [MSFT] (Expert):
Q: as to authoring new component to existing feature, I set the deploy path to a new subfolder (off installdir) and it just gets ignored during a minor upgrade... any ideas what can cause this (the new folder is in the directory table).
A: First, make sure your package validates (using ORCA for validation) and then check the InstallValidate action to see if the component is actually selected for install. Without examining the log file I cannot pin point why the component is not installing.

Tyler [MSFT] (Moderator):
Thank you everyone for joining us today on a Microsoft Community Chat to talk about the Windows Installer.
We have started holding our chats bi-monthly and the next Windows Installer chat will be on May 10th.
We will post the transcript from today's chat on https://msdn.microsoft.com/chats/transcripts/default.aspx

Eugen [MSFT] (Expert):
Q: I have another custom action in a C++ .DLL that is invoked by a "DoAction". The CA changes a PUBLIC property that is the value of an edit control. How do I refresh the "edit control" on the parent dialog with the new value of the PUBLIC property once
A: Unfortunately, this is not supported.

Tyler [MSFT] (Moderator):
Please remember that if you have any feature requests for the MSI team we would love to hear from you at MSIWISH@microsoft.com

Carolyn [MSFT] (Expert):
Q: Re message about not applying patches to admin installs - how else would you deploy a patch using GP? https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/uninstallable_patches.asp seems flawed in this respect.
A: It's a recommendation. The reason for the recommendation is due to the client-source-out-of-sync problem. THe moment you patch an administrative image, all clients have to perform recache/reinstalls in order to sync with the new source. If they fail to do that, then the source is considered invalid. Additionally, for uninstalling a patch you don't get that capability through update of administrative images. You have to basically redo your administrative image all over again (and rip/replace or something similar from the client). Additionally, MSI 3.0 provides a way for administrators to pre-bless a patch for per-machine and per-user managed installations. This way you can then distribute the client patch to the machine and have it work. See https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/patching_per-user_managed_applications.asp.

Carolyn [MSFT] (Expert):
Q: Using MSI 3.0 may i remove components?
A: Not in a small or minor update (a.k.a. QFE or Service Pack). Removal of components is only supported in major upgrades.

Hem [MSFT] (Expert):
Q: for 64 bit installs there are AMD and Intel arch. Do each need to have separate installs?
A: You will need seperate MSI packages for intel 64 and AMD 64 platforms if they carry binaries that install on only one of those platforms. If however, they carry just x86 binaries, the same x86 package can be installed on both the platforms. IA64 only or AMD64 only packages are marked that way in the MSI summary information stream.

Carolyn [MSFT] (Expert):
Q: what are some other news groups, discussion groups, ways of getting questions answered?
A: Try the Windows Installer newsgroups: microsoft.public.platformsdk.msi (for developers, setup authors) and microsoft.public.windows.msi (for IT oriented queries)

rajeshk [MSFT] (Expert):
Q: In other words, what is the sequence of Msi API calls needed to display a MSI modal dialog using MsiProcessMessage in a C++ custom action that is invoked via "DoAction" from a button on a MSI dialog?
A: A correction to my earier response. Currently in the scenario of "DoAction" invoking a CA, it is not possible to use MsiProcessMessage. This limitation exists on platforms LESSER than Windows Server 2003. On those platforms the only supported way is to use the automation method "Message" from a script custom action.

Tyler [MSFT] (Moderator):
Also, we have exciting news! There will be a Windows Installer breakout session as part of the Windows Desktop track at Microsoft TechEd 2005! For more information on Tech Ed please see https://www.microsoft.com/events/teched2005/default.mspx

Tyler [MSFT] (Moderator):
Thanks again for attending today's chat. :)

Carolyn [MSFT] (Expert):
"Adrian Accinelli". I totally understand. I'd like to remove short file names too :) ... but we do have to account for compatibility. It's something we could look into in the future though...

Robert (Expert):
Q: what are some other news groups, discussion groups, ways of getting questions answered?**
A:** Does the following text answer your question? The MSI documentation is the single best source we have for answering questions. The "bible" (as Rob, benovolent dictator of WiX, likes to call it) is the MSI sdk: Platform SDK: Windows Installer https://msdn.microsoft.com/library/en-us/msi/setup/about_windows_installer.asp. Beyond that there is the Windows MSI community site that will be posted at the end of the chat. Finally if all those avenues fail to get you what you need, try msiwish@microsoft.com to suggest how we might improve our documentation. Beyond the guts of MSI, there are the tasks you want to do with the MSI technology which might include building packages. For building packages I'm biased but I suggest WiX. In the binaries you'll find on https://sourceforge.net/projects/wix/, there is a wix.chm that has recently been updated with a lot more content. There is also a tutorial on the WiX wiki (google WiX tutorial). Additionally given WiX shared source, you can read the code.

Top of pageTop of page