Re: [WiX-users] How to best install generic system withcustomerspecific add-ins
Fair enough, I'll try to explain the situation a little better, but Sascha's suggestion about shared fragments files makes absolute sense now that I think about it. It hadn't even crossed my mind. I would to be careful about how I shared them, so I would only have one actual copy of the fragments files, otherwise I would face hell updating all copies when there were changes to the common files. Anyway: I have a service with a couple of common libraries, in itself this service does nothing. It merely forms an extensible framework for customer specific functions. Then I have the customer specific functions, these are just dll assemblies which are added to the service and supplies the actual functionality. So, instead of having to copy-and-paste a generic WiX project to each customer project, I thought I would make a generic module which contains the service and common assemblies, the necessary functionality for installing and starting the service etc. Additionally it would contain the UI sequence but allow for customer specific dialogs. This module would then be added to a customer specific installer which contained the remaining logic, like adding the customer extension to the framework and other various customer specific actions. This is what I want, how do I do that best? Merge Modules? WiX libraries? Shared WiX fragments? Best regards, Thomas Due -Original Message- From: Rob Mensching [mailto:r...@robmensching.com] Sent: 22. oktober 2009 17:41 To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to best install generic system withcustomerspecific add-ins If Merge Modules look like they will work, I'd use .wixlibs instead ( http://www.robmensching.com/blog/posts/2008/10/10/What-are-.wixlibs-and-why-would-you-use-them). The WiX toolset's reusable functionality (from the Extensions and all the UI) use .wixlibs. The Wix.chm has a nice section on how to customize dialogs. I'd start there. Without more details about your exact project it's hard to provide more detailed advice. smile/ On Thu, Oct 22, 2009 at 1:27 AM, Thomas Due thomas@scanvaegt.dk wrote: I have been studying the documentation and the tutorial and come to the conclusion that patching is out, since that is essentially just the difference between two installers which is exactly what I want to avoid; Writing two installers... So, my next thought is: How about merge modules then? What I mean is, that I put all the common stuff into a merge module, it seems that it can contain all the logic regarding files and components and installing/starting services etc. Then I write the installer for each customer, which contains only the customer specific bits and adds the merge module containing all the common bit etc. So far so good. But how about the UI? Can I contain MOST of the gui in the merge module and only add a few customer specific dialogs (if necessary) in the customer installer, and if so, how do inject dialogs like that? Best regards, Thomas Due - Software Developer -Original Message- From: Thomas Due Sent: 22. oktober 2009 09:13 To: General discussion for Windows Installer XML toolset. Subject: [WiX-users] How to best install generic system with customerspecific add-ins I am currently finishing up on a generic system which we will sell to many different customer with different needs. So, as a result this generic system is based on extensions, or add-ins. Now I am thinking how to best write an installer for this. Although I could copy-n-paste the entire WiX project every time I make a new customer-specific extension, I think that is quite the wrong way to go about writing the installer for this system. So, I am thinking patches, or maybe transformations? An installer for the system itself, and then a patch with the customer specific bits. This way, I get to maintain a single installer with upgrade codes etc. and a simple patch installer for each customer project. On paper that should be simple enough, but how do I do that? I am currently still learning WiX, so my knowledge is, at best, shaky. So I need a bit of help. How do I create patches for a specific installer, and is the plan actually sound? Best regards, Thomas Due - Software Developer -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- virtually, Rob Mensching - http://RobMensching.com LLC
[WiX-users] How to write a Bootstrapper
Hi, I want to install MySql and Jboss along with my product. I have lot of queries on how to write a Bootstraper for this. I. Is this BootStraper is an XML Scripting or a VC++ program? 2. How to add the sequence of my msi installations? 3. I want to install these third party products in the same path as my product, once user selects the path of installation from the UI. Please let me know if this is possible. 4. How to compile this BootStrapper. And what is the final output of compiling and linking. Is it an MSI again or something else. A sample Bootstrap program would be of great help to me. Thanks Regards, Srivardhan. -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] How to write a Bootstrapper
Hi, I also have similar kind of requirement but little different. I want to first install OfficePia.exe as prerequisitre first and then want to resume my actual msi installation. Can anybody help us to provide an sample of how to take care of two separate installation a. Install Prerequisite-- I need to execute and .exe file through Wix b. Install Main Program I would appreciate any help. Thanks, Sankha -Original Message- From: Sunkesula, Srivardhan [mailto:srivardhan.sunkes...@netapp.com] Sent: Friday, October 23, 2009 12:13 AM To: General discussion for Windows Installer XML toolset. Subject: [WiX-users] How to write a Bootstrapper Hi, I want to install MySql and Jboss along with my product. I have lot of queries on how to write a Bootstraper for this. I. Is this BootStraper is an XML Scripting or a VC++ program? 2. How to add the sequence of my msi installations? 3. I want to install these third party products in the same path as my product, once user selects the path of installation from the UI. Please let me know if this is possible. 4. How to compile this BootStrapper. And what is the final output of compiling and linking. Is it an MSI again or something else. A sample Bootstrap program would be of great help to me. Thanks Regards, Srivardhan. -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Using a CustomAction to modify a dialog
MSDN's overview is here: http://msdn.microsoft.com/library/aa368036.aspx A control can both publish (send out) and subscribe to (receive from others) events. However, not all controls can do both, and what they can do varies by control, by event, and by whether they are reporting or listening. Further, you can publish to an event OR a property. Publishing a property means that when the control would have fired that event, some property is set to the event's value. Publishing an event means shouting out: Hey, xyz(abc) just happened! where xyz is the event name and abc is the event value. Subscribing to an event hooks some control's attribute to an event, such that when that event is published, that control's attribute will be set to the event's value. Some events have built-in listeners, others don't. All of the documented defined events are listed on this page: http://msdn.microsoft.com/library/aa368043.aspx Since I don't use internal UI all that much, I forgot you can't call MsiProcessMessage from a custom action called via DoAction from an event. So, the only thing you can do with your custom action is change properties. Properties used for conditions are only evaluated when the dialog is first populated, so the only way to refresh the dialog is to replace the dialog with itself (assuming that can be done, which I don't honestly know). You would have to use the same event that calls your custom action with a later order value so that the activity that subscribes to that event runs after your custom action has completed. The event mapping is set, so typically what happens is you get the following kind of model: You can use some event from some control to fire your CA, which evaluates and sets a property. That same event can then trigger a pop-up dialog based on your property if you are reporting an error condition, which returns to your dialog when the user acknowledges it and tries again. That same event can move to another dialog based on another state of your property, for example, you passed validation. The above model is a type of PID validation sample I remember from the SDK a while back, but I am having trouble finding just where I found it before. When/if I find it, I will show what the markup looks like to implement it. I know it isn't just like what you are looking for, but we have said before that the internal UI is quite limited. There are a whole other set of limitations on the external and embedded UIs, but we don't live in a perfect world, apparently. -Original Message- From: Dan Giambalvo [mailto:danie...@microsoft.com] Sent: Thursday, October 22, 2009 4:07 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Using a CustomAction to modify a dialog I'm sorry, I'm having trouble wrapping my head around how this subscribe model works, and also difficulty figuring out how to fire the appropriate events from within the CustomAction (currently in VBScript.) Can you possibly offer a small bit of XML to demonstrate your thinking? -Original Message- From: Blair [mailto:os...@live.com] Sent: Thursday, October 22, 2009 3:10 PM To: 'General discussion for Windows Installer XML toolset.' Subject: Re: [WiX-users] Using a CustomAction to modify a dialog I've never tried this, but if the text control subscribes to the actiondata event, could your custom action send an actiondata event to it? Let us know how that works. -Original Message- From: Dan Giambalvo [mailto:danie...@microsoft.com] Sent: Thursday, October 22, 2009 2:56 PM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Using a CustomAction to modify a dialog I'm trying to use a CustomAction to do some evaluation, and modify an on-screen Windows Installer dialog. The scenario is this: 1) User enters some text in an edit control 2) User clicks a button which invokes a custom action to evaluate the entered text 3) Custom action completes, and some new text is shown to the user *in the same dialog* I've envisioned two ways of building this: 1) (ideal) Some Text Control lives on the dialog with Text= some property. The CustomAction modifies the property value, and the text control displays the new value. 2) I create a text control for each possible string I want to show all overlapping. The CustomAction either hides/shows the appropriate control, or sets some property which triggers a bunch of show/hide Conditions on each text control. The problem I'm running into is that I can't seem to get Windows Installer to re-evaluate any properties after the custom action ends. For example, I have a button that runs my custom action and it changes the property, but the UI doesn't update. If I spawn a dialog however (by hitting cancel for example) then the UI updates. Does anyone know of a clever way to tickle Windows Installer into re-evaluating properties after the CustomAction ends? Thanks -Dan
Re: [WiX-users] How to best install generic system withcustomerspecific add-ins
The difference between wixlibs and shared wix fragments is that the wixlibs are simply several shared compiled wix fragments joined into a single library file. That would ensure you don't have multiple copies of the sources, but would require that you compile them, either from their own projects in your solution(s) or into some super-library repository you simply grab at either buildtime or version control sync time. Either one is usually vastly superior to merge modules. Merge modules have several limitations that makes them more difficult to service, including issues related to patching. Their content lives in a strange world where they are live in your MSI but stand apart from all other content in that MSI. They bulk up the size and slow down the performance of your MSI due to the way they integrate in (created system folder custom actions, difficulties in being referenced from your MSI-specific authoring, etc.). The closest build-style to merge modules on your list would be wixlibs (you can build and managed them the exact same way, without the merge module-specific pain). Or, you simply link in your projects to the source files wherever you place them for the shared fragment solution. One other thing superior with the wixlib/shared fragments approach over the MSM one is that any fragments you don't access in some way aren't included in the final link, meaning they don't take up any room in your MSI. That means you can always include all of them in all your projects, and just reference what you need. Merge modules, once built, are an all-or-nothing where simply including them includes everything in the MSM in your MSI, whether you really needed it or not. -Original Message- From: Thomas Due [mailto:thomas@scanvaegt.dk] Sent: Thursday, October 22, 2009 11:45 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to best install generic system withcustomerspecific add-ins Fair enough, I'll try to explain the situation a little better, but Sascha's suggestion about shared fragments files makes absolute sense now that I think about it. It hadn't even crossed my mind. I would to be careful about how I shared them, so I would only have one actual copy of the fragments files, otherwise I would face hell updating all copies when there were changes to the common files. Anyway: I have a service with a couple of common libraries, in itself this service does nothing. It merely forms an extensible framework for customer specific functions. Then I have the customer specific functions, these are just dll assemblies which are added to the service and supplies the actual functionality. So, instead of having to copy-and-paste a generic WiX project to each customer project, I thought I would make a generic module which contains the service and common assemblies, the necessary functionality for installing and starting the service etc. Additionally it would contain the UI sequence but allow for customer specific dialogs. This module would then be added to a customer specific installer which contained the remaining logic, like adding the customer extension to the framework and other various customer specific actions. This is what I want, how do I do that best? Merge Modules? WiX libraries? Shared WiX fragments? Best regards, Thomas Due -Original Message- From: Rob Mensching [mailto:r...@robmensching.com] Sent: 22. oktober 2009 17:41 To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to best install generic system withcustomerspecific add-ins If Merge Modules look like they will work, I'd use .wixlibs instead ( http://www.robmensching.com/blog/posts/2008/10/10/What-are-.wixlibs-and-why- would-you-use-them). The WiX toolset's reusable functionality (from the Extensions and all the UI) use .wixlibs. The Wix.chm has a nice section on how to customize dialogs. I'd start there. Without more details about your exact project it's hard to provide more detailed advice. smile/ On Thu, Oct 22, 2009 at 1:27 AM, Thomas Due thomas@scanvaegt.dk wrote: I have been studying the documentation and the tutorial and come to the conclusion that patching is out, since that is essentially just the difference between two installers which is exactly what I want to avoid; Writing two installers... So, my next thought is: How about merge modules then? What I mean is, that I put all the common stuff into a merge module, it seems that it can contain all the logic regarding files and components and installing/starting services etc. Then I write the installer for each customer, which contains only the customer specific bits and adds the merge module containing all the common bit etc. So far so good. But how about the UI? Can I contain MOST of the gui in the merge module and only add a few customer specific dialogs (if necessary) in the customer installer, and if so, how do inject dialogs like that? Best
Re: [WiX-users] Upgrade and new install
Hi Rob, You are right. I have been in the pain for long time. But I have no charge of this CustomAction. I only know this CustomAction should be run only in the upgrade. And I have to make it work. :( I have modified the Registry element and give the condition to the custom as bellow: Property Id=INSTALLDIR RegistrySearch Id='ViewPointRegistry' Type='raw' Root='HKCU' Key='Software\Microsoft\ViewPointUpgrade' Name='InstallDir' / /Property DirectoryRef Id=APPLICATIONFOLDER Component Id=RegistryForUpgrade Guid=D555488C-C8E7-44eb-91EC-3750602A7599 RegistryKey Id='ViewPointInstallDir' Root='HKCU' Key='Software\Microsoft\ViewPointUpgrade' Action='createAndRemoveOnUninstall' RegistryValue Name='InstallDir' Type='string' Value='[APPLICATIONFOLDER]' / /RegistryKey /Component /DirectoryRef Custom Action=UpgradeStopServices1 Before=InstallFilesPREVIOUSFOUND AND INSTALLDIR/Custom The the upgrade is defined in the beginning of the wxs: Upgrade Id=8517ae9a-667d-4bd3-9cea-4323be6d7040 UpgradeVersion OnlyDetect=no Property=PREVIOUSFOUND Minimum=5.0.0.0 IncludeMinimum=yes Maximum=8.0.0.0 IncludeMaximum=no / /Upgrade However, when I run the upgrade, install version 2 in PathA, where the version 1 installed, CustomAction is still not called. It causes the problem for later function. Is there something wrong in Property define, or in the condition for CustomAction? Regards, Chunyan -Ursprüngliche Nachricht- Von: Rob Mensching [mailto:r...@robmensching.com] Gesendet: Donnerstag, 22. Oktober 2009 17:38 An: General discussion for Windows Installer XML toolset. Betreff: Re: [WiX-users] Upgrade and new install 1. Personally, I would highly suggest you change your application so this CustomAction is unnecessary. You are in for a world of pain in the long run. smile/ 2. The Registry element has been deprecated in WiX v3. The warning tells you exactly what to do. 3. You'll have to condition your CustomAction in your first version of your MSI to not run on upgrade in the cases you are trying to avoid. If you have already shipped the first version of the MSI then you probably have to release a patch to that version to add the condition. After the patch is applied then you can try the upgrade. 4. See #1. smile/ On Thu, Oct 22, 2009 at 6:51 AM, Jiang, Chunyan (GE Healthcare) chunyan.ji...@ge.com wrote: Although there is Warning message on compile. From the verbose log I got to know that the Custom Action will not be called when install version 2 to PathB. Howver, there is Remove Action trying to remove files from PathA for version 1 install during installing version 2 to PathB. And Install Validate also checks the files in PathA. How can I prevent the Remove Action performing on Version 1 in PathA, when install Version 2 in PathB. Should I set the condition INSTALLDIR to somewhere, like I did for custom action? -Ursprüngliche Nachricht- Von: Jiang, Chunyan (GE Healthcare) Gesendet: Donnerstag, 22. Oktober 2009 13:19 An: General discussion for Windows Installer XML toolset. Betreff: Re: [WiX-users] Upgrade and new install When I searched in Google, I found some one has the same problem as me. And the suggested solution is to define a property using RegistrySearch. And also define a registry with the install path [APPLICATIONFOLDER]. So that the upgrade will only happen when the registry with path found. I tried it as: Property Id=INSTALLDIR RegistrySearch Id='ViewPointRegistry' Type='raw' Root='HKCU' Key='Software\Microsoft\ViewPointUpgrade' Name='InstallDir' / /Property DirectoryRef Id=APPLICATIONFOLDER Component Id=RegistryForUpgrade Guid=D555488C-C8E7-44eb-91EC-3750602A7599 Registry Id='ViewPointInstallDir' Root='HKCU' Key='Software\Microsoft\ViewPointUpgrade' Name='InstallDir' Action='write' Type='string' Value='[APPLICATIONFOLDER]' / /Component /DirectoryRef And call custom action as: Custom Action=UpgradeStopServices1 Before=InstallFilesPREVIOUSFOUND AND INSTALLDIR/Custom But I got warning when I compile it: warning CNDL1080: The Registry element has been deprecated. Please use one of the new elements which replaces its functionality: RegistryKey for creating registry keys, RegistryValue for writing registry values, RemoveRegistryKey for removing registry keys, and RemoveRegistryValue for removing registry values. And when I install this version 2 installer msi, select PathB, the problem is still there. Is there something wrong in the Registry define? How to change it? -Ursprüngliche Nachricht- Von: Jiang, Chunyan (GE Healthcare) Gesendet: Donnerstag, 22. Oktober 2009 09:04 An: General discussion for Windows Installer XML toolset. Betreff: [WiX-users] Upgrade and new install Hi Wix-users, I have developed one upgradable installer with Wix3. As I
Re: [WiX-users] How to change shortcut name?
Hi Sascha, Thanks for your tip. I thought about using wix variable to set the name. However, the version number will be changed for every build. And I don't know if there is a varialbe for product version, so that I can refer it, instead of using fix string. If I define the variable like: ?define version = [ProductVersion] ? And set shortcut name as: Shortcut Id=DesktopShortcutMyAPP Name=MyAPP$(var.version)... When I install it, the shortcut shown on the desktop is: MyAPP[ProductVersion] Instead of MyAPP1.0.0.1 How can I set it? Chunyan -Ursprüngliche Nachricht- Von: Sascha Beaumont [mailto:sascha.beaum...@gmail.com] Gesendet: Freitag, 23. Oktober 2009 02:31 An: General discussion for Windows Installer XML toolset. Betreff: Re: [WiX-users] How to change shortcut name? Have you thought about using a wix variable to set the shortcut name at compile time, rather than at runtime? i.e. Shortcut/@Name=MyAPP $(var.version) Sascha On Thu, Oct 22, 2009 at 6:30 PM, Jiang, Chunyan (GE Healthcare) chunyan.ji...@ge.com wrote: Hi all, I have defined the shortcut like this: DirectoryRef Id=ShortcutFolder Component Id=DesktopShortcut Guid=D9DFCBA6-C98F-4146-87D9-C4F83349C8EC Shortcut Id=DesktopShortcutMyAPP Name=MyAPP Directory=DesktopFolder Target=[APPLICATIONFOLDER]/MyAPP.exe WorkingDirectory=APPLICATIONFOLDER / RemoveFolder Id=DesktopFolderVPAdmin On=uninstall / RegistryValue Root=HKCU Key=Software\Microsoft\MyAPP Name=installed Type=integer Value=1 KeyPath=yes / /Component /DirectoryRef However, I want to give the shortcut another name, like MyAPP 1.0.0.1, which is the version number. How can I perform it? I know that I can define custom action to change the Product Name, like: CustomAction Id=SetProductName Property=ProductName Value=MyAPP [ProductVersion] Execute=immediate / But it doesn't work for changing shortcut name. How to modify this custom action to fit for shortcut name? Regards, Chunyan -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] How to write a Bootstrapper
Hi maybe you should test the DotnetInstaller http://dotnetinstaller.codeplex.com/ Regards Michael -Ursprüngliche Nachricht- Von: Sankha Biswas (Extended Results Inc) [mailto:v-sab...@microsoft.com] Gesendet: Freitag, 23. Oktober 2009 09:59 An: General discussion for Windows Installer XML toolset. Betreff: Re: [WiX-users] How to write a Bootstrapper Hi, I also have similar kind of requirement but little different. I want to first install OfficePia.exe as prerequisitre first and then want to resume my actual msi installation. Can anybody help us to provide an sample of how to take care of two separate installation a. Install Prerequisite-- I need to execute and .exe file through Wix b. Install Main Program I would appreciate any help. Thanks, Sankha -Original Message- From: Sunkesula, Srivardhan [mailto:srivardhan.sunkes...@netapp.com] Sent: Friday, October 23, 2009 12:13 AM To: General discussion for Windows Installer XML toolset. Subject: [WiX-users] How to write a Bootstrapper Hi, I want to install MySql and Jboss along with my product. I have lot of queries on how to write a Bootstraper for this. I. Is this BootStraper is an XML Scripting or a VC++ program? 2. How to add the sequence of my msi installations? 3. I want to install these third party products in the same path as my product, once user selects the path of installation from the UI. Please let me know if this is possible. 4. How to compile this BootStrapper. And what is the final output of compiling and linking. Is it an MSI again or something else. A sample Bootstrap program would be of great help to me. Thanks Regards, Srivardhan. -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users * Hinweis: Dieses E-mail kann vertrauliche und geschützte Informationen enthalten. Sollten Sie nicht der beabsichtigte Empfänger sein, verständigen Sie bitte den Absender und löschen Sie dieses E-mail dann sofort. Notice: This e-mail contains information that is confidential and may be privileged. If you are not the intended recipient, please notify the sender and then delete this e-mail immediately. * -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
[WiX-users] How to assign user a Full Trust Level during installation process
Hello, I need some help regarding to Full Trust Level. Our application only allows to start from the users with Full Trust Level. We want that Full Trust Level must assign to user (if he is not with Full Trust Level) during the installation. In this way we can avoid this security problem to start our application after installation. What i need to do with MSI for making the user as full trusted during the installation process? Any kind of help would be highly appreciated. Thanks in Advance and Best Regards Adnan -- View this message in context: http://n2.nabble.com/How-to-assign-user-a-Full-Trust-Level-during-installation-process-tp3877669p3877669.html Sent from the wix-users mailing list archive at Nabble.com. -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] (still) trying to install a PowerShell SnapIn using WiX
What command are you running to link your project (light.exe)? I see no notable differences between what you have and what I've had for a while that works for me ( http://psmsi.codeplex.com/SourceControl/changeset/view/28813#40647). On Tue, Oct 20, 2009 at 11:22 AM, Michael_A mcl...@fullarmor.com wrote: Mark Parker-2 wrote: Simon Dahlbacka wrote: On Mon, Sep 28, 2009 at 9:37 PM, Mark godef...@gmail.com wrote: I'm (still) trying to install a SnapIn using WiX and PSExtension. I'm (still) getting the same error, however, which doesn't make any sense to me, and I believe it's a bug in PSExtension. Here's the relevant component in my .wxs file: Component Id=nmps_dll Guid=1c48d3b5-64ab-4f0c-9ce6-c4eb6f3232e9 File Id=pstools.dll Source=$(var.pstools.TargetDir) KeyPath=yes Assembly=.net AssemblyApplication=pstools.dll ps:SnapIn Id=pstools Description=Management Tools Vendor=mycompany / /File /Component And when I try to build the installer, I get this error: Unresolved bind-time variable !(bind.assemblyName.pstools.dll), Version=!(bind.assemblyVersion.pstools.dll), Culture=!(bind.assemblyCulture.pstools.dll), PublicKeyToken=!(bind.assemblyPublicKeyToken.pstools.dll). If I leave the ps:SnapIn tag out, it builds fine (but doesn't register the snapin, of course), and if I leave the AssemblyApplication attribute out, I get an error about strong names (which is expected, it's not strong-named, but I don't want it to go in the GAC). Don't know anything about installing snapins but: Doesn't @Assembly=.net say that the file is to be installed in GAC ? /Simon Did you ever find a resoultion to this issue as I'm having the same problem. --Michael -- Come build with us! The BlackBerryreg; Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9#45;12, 2009. Register now#33; http://p.sf.net/sfu/devconf ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- View this message in context: http://n2.nabble.com/still-trying-to-install-a-PowerShell-SnapIn-using-WiX-tp3731130p3860392.html Sent from the wix-users mailing list archive at Nabble.com. -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Heath Stewart Deployment Technologies Team, Microsoft http://blogs.msdn.com/heaths -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] How to write a Bootstrapper
Thank you, Michael. I'll start my research with this. Thanks Regards, Srivardhan. -Original Message- From: Berger Michael [mailto:m.ber...@palfinger.com] Sent: Friday, October 23, 2009 2:18 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to write a Bootstrapper Hi maybe you should test the DotnetInstaller http://dotnetinstaller.codeplex.com/ Regards Michael -Ursprüngliche Nachricht- Von: Sankha Biswas (Extended Results Inc) [mailto:v-sab...@microsoft.com] Gesendet: Freitag, 23. Oktober 2009 09:59 An: General discussion for Windows Installer XML toolset. Betreff: Re: [WiX-users] How to write a Bootstrapper Hi, I also have similar kind of requirement but little different. I want to first install OfficePia.exe as prerequisitre first and then want to resume my actual msi installation. Can anybody help us to provide an sample of how to take care of two separate installation a. Install Prerequisite-- I need to execute and .exe file through Wix b. Install Main Program I would appreciate any help. Thanks, Sankha -Original Message- From: Sunkesula, Srivardhan [mailto:srivardhan.sunkes...@netapp.com] Sent: Friday, October 23, 2009 12:13 AM To: General discussion for Windows Installer XML toolset. Subject: [WiX-users] How to write a Bootstrapper Hi, I want to install MySql and Jboss along with my product. I have lot of queries on how to write a Bootstraper for this. I. Is this BootStraper is an XML Scripting or a VC++ program? 2. How to add the sequence of my msi installations? 3. I want to install these third party products in the same path as my product, once user selects the path of installation from the UI. Please let me know if this is possible. 4. How to compile this BootStrapper. And what is the final output of compiling and linking. Is it an MSI again or something else. A sample Bootstrap program would be of great help to me. Thanks Regards, Srivardhan. -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users * Hinweis: Dieses E-mail kann vertrauliche und geschützte Informationen enthalten. Sollten Sie nicht der beabsichtigte Empfänger sein, verständigen Sie bitte den Absender und löschen Sie dieses E-mail dann sofort. Notice: This e-mail contains information that is confidential and may be privileged. If you are not the intended recipient, please notify the sender and then delete this e-mail immediately. * -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Upgrade and new install
Hi Rob, I think over my scenario and clarify it that I want my App should be installed with the registry, which has the path information (PathA) in it. So that when install a higher version (version 2) in another path (PathB), even they have same UpgradeCode, the previous version (version1) should not be upgraded (no Remove Action, no CustomAction). And the higher version is only treated as new install. However, if I define the RegistryKey and RegistrySearch as my previous email, the Property INSTALLDIR will be always true, since it is all for the current install, not search previus install. And when I check the Registry Editor, I only find the current Registry: ViewPointUpgrade, value:PathB There is no previous registry. So the RegistrySearch will always be true. As I imagine, all the installation should be in the registry. And the property INSTALLDIR will do the registrysearch for all installed version. How to realize it? Regards, Chunyan -Ursprüngliche Nachricht- Von: Jiang, Chunyan (GE Healthcare) Gesendet: Freitag, 23. Oktober 2009 10:39 An: General discussion for Windows Installer XML toolset. Betreff: Re: [WiX-users] Upgrade and new install Hi Rob, You are right. I have been in the pain for long time. But I have no charge of this CustomAction. I only know this CustomAction should be run only in the upgrade. And I have to make it work. :( I have modified the Registry element and give the condition to the custom as bellow: Property Id=INSTALLDIR RegistrySearch Id='ViewPointRegistry' Type='raw' Root='HKCU' Key='Software\Microsoft\ViewPointUpgrade' Name='InstallDir' / /Property DirectoryRef Id=APPLICATIONFOLDER Component Id=RegistryForUpgrade Guid=D555488C-C8E7-44eb-91EC-3750602A7599 RegistryKey Id='ViewPointInstallDir' Root='HKCU' Key='Software\Microsoft\ViewPointUpgrade' Action='createAndRemoveOnUninstall' RegistryValue Name='InstallDir' Type='string' Value='[APPLICATIONFOLDER]' / /RegistryKey /Component /DirectoryRef Custom Action=UpgradeStopServices1 Before=InstallFilesPREVIOUSFOUND AND INSTALLDIR/Custom The the upgrade is defined in the beginning of the wxs: Upgrade Id=8517ae9a-667d-4bd3-9cea-4323be6d7040 UpgradeVersion OnlyDetect=no Property=PREVIOUSFOUND Minimum=5.0.0.0 IncludeMinimum=yes Maximum=8.0.0.0 IncludeMaximum=no / /Upgrade However, when I run the upgrade, install version 2 in PathA, where the version 1 installed, CustomAction is still not called. It causes the problem for later function. Is there something wrong in Property define, or in the condition for CustomAction? Regards, Chunyan -Ursprüngliche Nachricht- Von: Rob Mensching [mailto:r...@robmensching.com] Gesendet: Donnerstag, 22. Oktober 2009 17:38 An: General discussion for Windows Installer XML toolset. Betreff: Re: [WiX-users] Upgrade and new install 1. Personally, I would highly suggest you change your application so this CustomAction is unnecessary. You are in for a world of pain in the long run. smile/ 2. The Registry element has been deprecated in WiX v3. The warning tells you exactly what to do. 3. You'll have to condition your CustomAction in your first version of your MSI to not run on upgrade in the cases you are trying to avoid. If you have already shipped the first version of the MSI then you probably have to release a patch to that version to add the condition. After the patch is applied then you can try the upgrade. 4. See #1. smile/ On Thu, Oct 22, 2009 at 6:51 AM, Jiang, Chunyan (GE Healthcare) chunyan.ji...@ge.com wrote: Although there is Warning message on compile. From the verbose log I got to know that the Custom Action will not be called when install version 2 to PathB. Howver, there is Remove Action trying to remove files from PathA for version 1 install during installing version 2 to PathB. And Install Validate also checks the files in PathA. How can I prevent the Remove Action performing on Version 1 in PathA, when install Version 2 in PathB. Should I set the condition INSTALLDIR to somewhere, like I did for custom action? -Ursprüngliche Nachricht- Von: Jiang, Chunyan (GE Healthcare) Gesendet: Donnerstag, 22. Oktober 2009 13:19 An: General discussion for Windows Installer XML toolset. Betreff: Re: [WiX-users] Upgrade and new install When I searched in Google, I found some one has the same problem as me. And the suggested solution is to define a property using RegistrySearch. And also define a registry with the install path [APPLICATIONFOLDER]. So that the upgrade will only happen when the registry with path found. I tried it as: Property Id=INSTALLDIR RegistrySearch Id='ViewPointRegistry' Type='raw' Root='HKCU' Key='Software\Microsoft\ViewPointUpgrade' Name='InstallDir' / /Property DirectoryRef Id=APPLICATIONFOLDER Component Id=RegistryForUpgrade
Re: [WiX-users] How to best install genericsystem withcustomerspecific add-ins
Cool, that actually sounds like a clever plan. Thanks for the input. Best regards, Thomas Due -Original Message- From: Blair [mailto:os...@live.com] Sent: 23. oktober 2009 10:29 To: 'General discussion for Windows Installer XML toolset.' Subject: Re: [WiX-users] How to best install genericsystem withcustomerspecific add-ins The difference between wixlibs and shared wix fragments is that the wixlibs are simply several shared compiled wix fragments joined into a single library file. That would ensure you don't have multiple copies of the sources, but would require that you compile them, either from their own projects in your solution(s) or into some super-library repository you simply grab at either buildtime or version control sync time. Either one is usually vastly superior to merge modules. Merge modules have several limitations that makes them more difficult to service, including issues related to patching. Their content lives in a strange world where they are live in your MSI but stand apart from all other content in that MSI. They bulk up the size and slow down the performance of your MSI due to the way they integrate in (created system folder custom actions, difficulties in being referenced from your MSI-specific authoring, etc.). The closest build-style to merge modules on your list would be wixlibs (you can build and managed them the exact same way, without the merge module-specific pain). Or, you simply link in your projects to the source files wherever you place them for the shared fragment solution. One other thing superior with the wixlib/shared fragments approach over the MSM one is that any fragments you don't access in some way aren't included in the final link, meaning they don't take up any room in your MSI. That means you can always include all of them in all your projects, and just reference what you need. Merge modules, once built, are an all-or-nothing where simply including them includes everything in the MSM in your MSI, whether you really needed it or not. -Original Message- From: Thomas Due [mailto:thomas@scanvaegt.dk] Sent: Thursday, October 22, 2009 11:45 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to best install generic system withcustomerspecific add-ins Fair enough, I'll try to explain the situation a little better, but Sascha's suggestion about shared fragments files makes absolute sense now that I think about it. It hadn't even crossed my mind. I would to be careful about how I shared them, so I would only have one actual copy of the fragments files, otherwise I would face hell updating all copies when there were changes to the common files. Anyway: I have a service with a couple of common libraries, in itself this service does nothing. It merely forms an extensible framework for customer specific functions. Then I have the customer specific functions, these are just dll assemblies which are added to the service and supplies the actual functionality. So, instead of having to copy-and-paste a generic WiX project to each customer project, I thought I would make a generic module which contains the service and common assemblies, the necessary functionality for installing and starting the service etc. Additionally it would contain the UI sequence but allow for customer specific dialogs. This module would then be added to a customer specific installer which contained the remaining logic, like adding the customer extension to the framework and other various customer specific actions. This is what I want, how do I do that best? Merge Modules? WiX libraries? Shared WiX fragments? Best regards, Thomas Due -Original Message- From: Rob Mensching [mailto:r...@robmensching.com] Sent: 22. oktober 2009 17:41 To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to best install generic system withcustomerspecific add-ins If Merge Modules look like they will work, I'd use .wixlibs instead ( http://www.robmensching.com/blog/posts/2008/10/10/What-are-.wixlibs-and- why- would-you-use-them). The WiX toolset's reusable functionality (from the Extensions and all the UI) use .wixlibs. The Wix.chm has a nice section on how to customize dialogs. I'd start there. Without more details about your exact project it's hard to provide more detailed advice. smile/ On Thu, Oct 22, 2009 at 1:27 AM, Thomas Due thomas@scanvaegt.dk wrote: I have been studying the documentation and the tutorial and come to the conclusion that patching is out, since that is essentially just the difference between two installers which is exactly what I want to avoid; Writing two installers... So, my next thought is: How about merge modules then? What I mean is, that I put all the common stuff into a merge module, it seems that it can contain all the logic regarding files and components and installing/starting services etc. Then I write the installer for each customer, which
Re: [WiX-users] How to write a Bootstrapper
I also came across this WPF tool Client Profile Configuration Designer which was demonstrated at PDC2008. You could use this one as well. I loved this! - http://code.msdn.microsoft.com/cpcd Cheers' Vijay Raj MS-MVP [Setup-Deploy] Weblog: www.msigeek.comhttp://www.msigeek.com -Original Message- From: Sunkesula, Srivardhan [mailto:srivardhan.sunkes...@netapp.com] Sent: Friday, October 23, 2009 3:17 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to write a Bootstrapper Thank you, Michael. I'll start my research with this. Thanks Regards, Srivardhan. -Original Message- From: Berger Michael [mailto:m.ber...@palfinger.com] Sent: Friday, October 23, 2009 2:18 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to write a Bootstrapper Hi maybe you should test the DotnetInstaller http://dotnetinstaller.codeplex.com/ Regards Michael -Ursprüngliche Nachricht- Von: Sankha Biswas (Extended Results Inc) [mailto:v-sab...@microsoft.com] Gesendet: Freitag, 23. Oktober 2009 09:59 An: General discussion for Windows Installer XML toolset. Betreff: Re: [WiX-users] How to write a Bootstrapper Hi, I also have similar kind of requirement but little different. I want to first install OfficePia.exe as prerequisitre first and then want to resume my actual msi installation. Can anybody help us to provide an sample of how to take care of two separate installation a. Install Prerequisite-- I need to execute and .exe file through Wix b. Install Main Program I would appreciate any help. Thanks, Sankha -Original Message- From: Sunkesula, Srivardhan [mailto:srivardhan.sunkes...@netapp.com] Sent: Friday, October 23, 2009 12:13 AM To: General discussion for Windows Installer XML toolset. Subject: [WiX-users] How to write a Bootstrapper Hi, I want to install MySql and Jboss along with my product. I have lot of queries on how to write a Bootstraper for this. I. Is this BootStraper is an XML Scripting or a VC++ program? 2. How to add the sequence of my msi installations? 3. I want to install these third party products in the same path as my product, once user selects the path of installation from the UI. Please let me know if this is possible. 4. How to compile this BootStrapper. And what is the final output of compiling and linking. Is it an MSI again or something else. A sample Bootstrap program would be of great help to me. Thanks Regards, Srivardhan. -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.netmailto:WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.netmailto:WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users * Hinweis: Dieses E-mail kann vertrauliche und geschützte Informationen enthalten. Sollten Sie nicht der beabsichtigte Empfänger sein, verständigen Sie bitte den Absender und löschen Sie dieses E-mail dann sofort. Notice: This e-mail contains information that is confidential and may be privileged. If you are not the intended recipient, please notify the sender and then delete this e-mail immediately. * -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.netmailto:WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer
Re: [WiX-users] Build time Component.wxs generation...
Yeah, I guess we give up the ability patch. Though we've never done that before. Guess that's something for management to decide. We currently use the -gg option on one feature that would never be patched. Though, I guess, -ag would accomplish the same behavior since -gg generates new guids as well. Do you check-in the auto-generated component.wxs file? Or just check-in an empty sub file? On Thu, Oct 22, 2009 at 4:46 PM, Blair os...@live.com wrote: Use heat.exe with -ag and always use Major Upgrade (Product Id='*'), never patch. -Original Message- From: Tony [mailto:yellowjacketl...@gmail.com] Sent: Thursday, October 22, 2009 12:56 PM To: WiX Users Subject: [WiX-users] Build time Component.wxs generation... I'm aware of heat.exe and we have used to to seed our component.wxs files for our various wixlibs, but how do you deal with features like websites and help systems which often have dozens of files added at any time during development cycles? Re-running heat can work, sort of, it will change the component guids, but leaves the component Ids of existing components alone. Not sure how it deals with removed components. I stumbled across this 3rd party tool called Paraffin that appears to solve this issue, but have not attempted to put it to use in our build environment. What have others used to deal with features that often have an ever growing (and sometimes shrinking) list of components? -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
[WiX-users] CustomAction Session Database Error...
Hi all, I'm not sure if this is the best place for this question, so point me in the right direction if it is not. It's basically to do with running a CustomAction that returns a view from the Session Database using VBScript When I this function is called Function GetComboBoxView(oProperty) Dim oView Set oView = Session.Database.OpenView(SELECT * FROM ComboBox WHERE Property = ' oProperty ') oView.Execute GetComboBoxView oView End Function I get the following error message. Microsoft VBScript runtime error: Object doesn't support this property or method Line 4, Column 6. The actually function I call from the CustomAction is as follows Function GetProductInstances() PopulateProductInstanceComboBox GetComboBoxView(PRODUCTINSTANCE), Session.Property(PRODUCTREGISTRYPATH) End Function Function PopulateProductInstanceComboBox( oView, oProductKey ) Dim aProductInstances, intI, rec aProductInstances = ReadRegKeys(HKEY_LOCAL_MACHINE, oProductKey, 32) intI = 0 For Each sProductInstance In aProductInstances If intI = 0 Then ' ' Populates property PRODUCTINSTANCE with the first Product Instance ' Session.Property(PRODUCTINSTANCE) = sProductInstance End If AddItemToComboBox oView, sProductInstance, intI intI = intI + 1 Next ' clean up Set aProductInstances = Nothing End Function Any ideas? Thanks. DOMINIQUE LOUIS | IS DEVELOPER, AMX DIGITAL MEDIA GROUP AMX UK| 6TH FLOOR SALISBURY HOUSE,| LONDON WALL | LONDON | EC2M 5QQ AMX AMX UK Auster Road Clifton Moor York, North Yorkshire United Kingdom YO30 4GD +44 (0) 1904 343100 office +44 (0) 1904 343101 fax AMX South 6th Floor Salisbury House London Wall London United Kingdom EC2M 5QQ +44 (0) 2076 529450 office +44 (0) 8701 991661 fax AMX Belgium Boerenkrijglaan, 96a B-2260 Westerlo Belgium + 32 (0) 1454 2763 office + 32 (0) 1454 2766 fax ## Attention: This e-mail message is privileged and confidential. If you are not the intended recipient please delete the message and notify the sender. Any views or opinions presented are solely those of the author. This email was scanned and cleared by NetIQ MailMarshal. ## -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Build time Component.wxs generation...
Hey Tony, The GUID generation for -ag doesn't actually occur until Bind time. So, there would be no output for you to check in. Take a look at the Binder.cs and SetComponentGuids(Output output) method for more details. Thanks, Brian Rogers Intelligence removes complexity. - Me http://blogs.msdn.com/icumove -- NEW On Fri, Oct 23, 2009 at 8:26 AM, Tony yellowjacketl...@gmail.com wrote: Yeah, I guess we give up the ability patch. Though we've never done that before. Guess that's something for management to decide. We currently use the -gg option on one feature that would never be patched. Though, I guess, -ag would accomplish the same behavior since -gg generates new guids as well. Do you check-in the auto-generated component.wxs file? Or just check-in an empty sub file? On Thu, Oct 22, 2009 at 4:46 PM, Blair os...@live.com wrote: Use heat.exe with -ag and always use Major Upgrade (Product Id='*'), never patch. -Original Message- From: Tony [mailto:yellowjacketl...@gmail.com] Sent: Thursday, October 22, 2009 12:56 PM To: WiX Users Subject: [WiX-users] Build time Component.wxs generation... I'm aware of heat.exe and we have used to to seed our component.wxs files for our various wixlibs, but how do you deal with features like websites and help systems which often have dozens of files added at any time during development cycles? Re-running heat can work, sort of, it will change the component guids, but leaves the component Ids of existing components alone. Not sure how it deals with removed components. I stumbled across this 3rd party tool called Paraffin that appears to solve this issue, but have not attempted to put it to use in our build environment. What have others used to deal with features that often have an ever growing (and sometimes shrinking) list of components? -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Build time Component.wxs generation...
The would be output to changed if files were added/removed, which is what I'm mostly concerned about. Web developer adds 5 more aspx pages and the next build's websitecomponents.wxs file will now be different than the previous version. But do I need a checked in copy of a build time generated file?? On Fri, Oct 23, 2009 at 12:32 PM, Brian Rogers rogers.br...@gmail.com wrote: Hey Tony, The GUID generation for -ag doesn't actually occur until Bind time. So, there would be no output for you to check in. Take a look at the Binder.cs and SetComponentGuids(Output output) method for more details. Thanks, Brian Rogers Intelligence removes complexity. - Me http://blogs.msdn.com/icumove -- NEW On Fri, Oct 23, 2009 at 8:26 AM, Tony yellowjacketl...@gmail.com wrote: Yeah, I guess we give up the ability patch. Though we've never done that before. Guess that's something for management to decide. We currently use the -gg option on one feature that would never be patched. Though, I guess, -ag would accomplish the same behavior since -gg generates new guids as well. Do you check-in the auto-generated component.wxs file? Or just check-in an empty sub file? On Thu, Oct 22, 2009 at 4:46 PM, Blair os...@live.com wrote: Use heat.exe with -ag and always use Major Upgrade (Product Id='*'), never patch. -Original Message- From: Tony [mailto:yellowjacketl...@gmail.com] Sent: Thursday, October 22, 2009 12:56 PM To: WiX Users Subject: [WiX-users] Build time Component.wxs generation... I'm aware of heat.exe and we have used to to seed our component.wxs files for our various wixlibs, but how do you deal with features like websites and help systems which often have dozens of files added at any time during development cycles? Re-running heat can work, sort of, it will change the component guids, but leaves the component Ids of existing components alone. Not sure how it deals with removed components. I stumbled across this 3rd party tool called Paraffin that appears to solve this issue, but have not attempted to put it to use in our build environment. What have others used to deal with features that often have an ever growing (and sometimes shrinking) list of components? -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now!
Re: [WiX-users] Questions on more advanced WiX Installer UI
Sascha, Thanks for the reply. Long term ( philosophically), I generally agree with you. I think the idea of doing as little as possible in the installer, and pushing it instead to a branded first-run experience inside the application has a lot of benefits. People don't like dealing with installers, and in general you have a lot more flexibility in what you can do from within the codebase of the product. The downside of course is that windows installer then doesn't know about the things you've done, and so can't undo them to restore/maintain machine state. You could argue the same is true for custom actions anyway, and are probably right. But I digress. In the short term, we do have need to do this in the installer. Our install process currently involves some rather time-intensive tasks which we don't want the user to have to wait on IF they are only going to have to give up and go home because they don't have a key. Undoubtedly all of this could be moved into some post-install step, but that is out of scope for where we are in our product cycle. We're going to have to make do with what Windows Installer gives us. Longer term, I'm hoping to move in the direction you've prescribed. We also have a rather unique set of requirements and a pretty controlled install environment, which also helps mitigate some of the (very good) points you raise W.R.T. install-time checks like we're doing. Thanks again for your feedback -Dan -Original Message- From: Sascha Beaumont [mailto:sascha.beaum...@gmail.com] Sent: Thursday, October 22, 2009 7:16 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Questions on more advanced WiX Installer UI Hi Dan, This sounds like something similar to what we were trying to do with our installer. The question you should ask yourself is do you need to do this during installation, or could you move some of these steps to a post-install phase? What we ended up doing is for interactive installations, launching a separate program post-install that does all the key validation and the required webservice calls when the user presses the Finish button. For corporate deployments (i.e. silent mode, no UI), certain properties can be embedded in the MSI or provided on the command line - if these are present we call a command line program with CAQuietExec that does pretty much the same thing that the GUI would. The key is further validated by the application at runtime, dropping back into a demo mode if it can't find a license and prompting the user to launch the activation GUI program. The end result is a simpler installation that's much easier to manage, requiring an internet connection during install can lead to a number of problems so by separating it out the user doesn't get as confused about why things might be failing. Sascha On Thu, Oct 22, 2009 at 4:53 AM, Dan Giambalvo danie...@microsoft.com wrote: I'm working on some enhancements to our WiX based setup UI, and wanted to know if a few things are possible using the UI components Windows Installer makes available: 1) We have a custom action as a part of our installer that makes a web service call. We'd like to embed in the UI a spinner that would spin during the time we are making the call. Does such a control exist in the Windows Installer toolkit? Can we use some type of animated gif for this purpose? 2) We have to accept entry of a product-key type code at install. Ideally, we'd like to add some logic so we auto-add/remove separators at the right time, don't allow invalid characters (input is Hex) etc. Does Windows Installer have any mechanism for doing this sort of thing? Thanks in advance for any help! -Dan -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The
[WiX-users] Property-RegistrySearch during uninstall
Is Property--RegistrySearch evaluated during uninstall as well? I'd like to set a property's value to a registry value during uninstall. IOW, I need to use a value found in the registry during uninstall. -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Modify INSTALLDIR using custom action?
Thanks Alex, I learnt from your blog that CA Type 35 scheduled after CostFinalize can be used to set MYDIR. However, the issue is that [INSTALLDIR] passed in by the parent project could be anywhere (user input), so I don't know it in advance. So it comes back to the question how I can walk up to the parent directory and create my directory structure from there. Here what I have: Place holder for MYDIR --- Directory Id=TARGETDIR Name=SourceDir Directory Id=INSTALLDIR / Directory Id=MYDIR Name=. / /Directory and the CA is: --Custom Action - CustomAction Id=SetMyDirPath Directory=MYDIR Value=[INSTALLDIR]\..\My folder / InstallExecuteSequence Custom Action=SetMyDirPath After=CostFinalizeNot Installed/Custom /InstallExecuteSequence --- The compiler would complain about the .. again, something like: Error 1324. The folder path '..' contains an invalid character. On Thu, Oct 22, 2009 at 3:57 PM, Alexander Shevchuk (Volt) a-ale...@microsoft.com wrote: You need to use CA Type 35 scheduled after CostFinalize to set MYDIR to whatever you want. Alex -Original Message- From: Hoang Le [mailto:hoangle2...@gmail.com] Sent: Thursday, October 22, 2009 3:44 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Modify INSTALLDIR using custom action? Thanks Craig, I've tried this before and the compiler doesn't seem to like the .. My code somehow like this Directory Id=TARGETDIR Name=SourceDir Directory Id =INSTALLDIR Directory Id=MYDIR Name=[INSTALLDIR]..\MyInstallDir / /Directory /Directory Here is the error: --- error CNDL0027: The Directory/@Name attribute's value, '[INSTALLDIR]..\MyInstallDir', is not a valid long name because it contains illegal characters. Legal long names contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: \ ? | : / * . On Thu, Oct 22, 2009 at 3:08 PM, Craig Miller craig.mil...@spatialminds.com wrote: Try [INSTALLDIR]..\siblingdir\ -Original Message- From: Hoang Le [mailto:hoangle2...@gmail.com] Sent: Thursday, October 22, 2009 3:02 PM To: General discussion for Windows Installer XML toolset. Subject: [WiX-users] Modify INSTALLDIR using custom action? Hi, My merge module receives an INSTALLDIR value passed in by a parent project (which I have no control over), and the requirement is that I have to install my files to a directory under the parent of INSTALLDIR (a sibling of INSTALLDIR). My initial thought was to get the value of [INSTALLDIR], locate its parent, then create my dir structure from there. This sounds very simple but quite hard to achieve. Any helpful idea is greatly appreciated. Thanks. -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net
[WiX-users] Blocking install if property isn't set
Our installer has some UI which requests and validates a product key from the user during InstallUISequence. I want to add an additional checks so that if some clever user tries to silently install our msi to bypass the UI (and hence the validation UI) that they install will fail. I have a private property in the installer which I can check to know if we've successfully validated a key, I'm just not sure how to make the entire InstallExecute sequence contingent on it (and only so on clean installs, but not uninstalls/upgrades/repairs/etc.) I'm guessing there's a right way to do this. Can anyone tell me what it is? Thanks! -Dan -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
[WiX-users] Translating from ancient to v3 WiX
I'm translating some v1 and v2 WiX files to v3 Wix, but I'm having trouble dealing with a CustomAction construct. In the old source I'll see: CustomAction Directory= VBScriptCall=SOME-VB-SCRIPT-INLINE Id=I_DO_SOME_VB_INLINE Now, after passing the file through wixcop -f and doing some editing, candle reports that Directory is inappropriate for several reasons. Candle also reports that this CA needs a BinaryKey, FileKey, or Property. What v3 construct would best mimic the archaic behavior above? -- John M. Cooper Collabera at Microsoft -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Using a CustomAction to modify a dialog
Thanks for the detailed response. I read over the MSDN overview 3 times, but it still wasn't really clicking for me. Unfortunately, the Windows Installer docs seem to discuss everything at the abstract level, but really lack in the way of real world examples. For example, figuring out what the Attribute property means when subscribing to an event, or what you'd use it for is pretty elusive. I suspected it references the property on the subscribing control that needs to be updated when the event fires, but I've seen it used in ways that cause me to question that assumption. What I've found I can do is have a CustomAction modify a property (which doesn't trigger windows installer) but then publish the property value to itself like this Publish Property=Foo Value=[Foo]1/Publish This seems to trick Windows Installer into re-evaluating the value of that property. Then I have a bunch of text controls with conditions that show/hide them depending on the resultant value. This mostly gives me what I'm looking for. The one thing I can't do (and didn't mention below) is actually changing the Windows Installer UI while still in the CA. Imagine a CA that takes a while, and you want to update some progress text on the UI. I don't think the CA can trigger this, and I can't come up with any clever way to create a loop of Publish entries so could repeatedly call a CA that is monitoring some background task until it's done. All of that said, the approach I discuss above does appear good enough. I noticed that you can call Session.Message object to send a record of type msiMessageTypeActionData. I have no idea if that will do what I want, but I might try it after I get the basics nailed, and see if it's the magic I'm looking for. It may have the same limitation you mention below with MsiProcessMessage. Thanks again! -Dan -Original Message- From: Blair [mailto:os...@live.com] Sent: Friday, October 23, 2009 1:16 AM To: 'General discussion for Windows Installer XML toolset.' Subject: Re: [WiX-users] Using a CustomAction to modify a dialog MSDN's overview is here: http://msdn.microsoft.com/library/aa368036.aspx A control can both publish (send out) and subscribe to (receive from others) events. However, not all controls can do both, and what they can do varies by control, by event, and by whether they are reporting or listening. Further, you can publish to an event OR a property. Publishing a property means that when the control would have fired that event, some property is set to the event's value. Publishing an event means shouting out: Hey, xyz(abc) just happened! where xyz is the event name and abc is the event value. Subscribing to an event hooks some control's attribute to an event, such that when that event is published, that control's attribute will be set to the event's value. Some events have built-in listeners, others don't. All of the documented defined events are listed on this page: http://msdn.microsoft.com/library/aa368043.aspx Since I don't use internal UI all that much, I forgot you can't call MsiProcessMessage from a custom action called via DoAction from an event. So, the only thing you can do with your custom action is change properties. Properties used for conditions are only evaluated when the dialog is first populated, so the only way to refresh the dialog is to replace the dialog with itself (assuming that can be done, which I don't honestly know). You would have to use the same event that calls your custom action with a later order value so that the activity that subscribes to that event runs after your custom action has completed. The event mapping is set, so typically what happens is you get the following kind of model: You can use some event from some control to fire your CA, which evaluates and sets a property. That same event can then trigger a pop-up dialog based on your property if you are reporting an error condition, which returns to your dialog when the user acknowledges it and tries again. That same event can move to another dialog based on another state of your property, for example, you passed validation. The above model is a type of PID validation sample I remember from the SDK a while back, but I am having trouble finding just where I found it before. When/if I find it, I will show what the markup looks like to implement it. I know it isn't just like what you are looking for, but we have said before that the internal UI is quite limited. There are a whole other set of limitations on the external and embedded UIs, but we don't live in a perfect world, apparently. -Original Message- From: Dan Giambalvo [mailto:danie...@microsoft.com] Sent: Thursday, October 22, 2009 4:07 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Using a CustomAction to modify a dialog I'm sorry, I'm having trouble wrapping my head around how this subscribe model works, and also
Re: [WiX-users] How to change shortcut name?
How do you set produ...@version? -Original Message- From: Jiang, Chunyan (GE Healthcare) [mailto:chunyan.ji...@ge.com] Sent: Friday, October 23, 2009 1:42 AM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to change shortcut name? Hi Sascha, Thanks for your tip. I thought about using wix variable to set the name. However, the version number will be changed for every build. And I don't know if there is a varialbe for product version, so that I can refer it, instead of using fix string. If I define the variable like: ?define version = [ProductVersion] ? And set shortcut name as: Shortcut Id=DesktopShortcutMyAPP Name=MyAPP$(var.version)... When I install it, the shortcut shown on the desktop is: MyAPP[ProductVersion] Instead of MyAPP1.0.0.1 How can I set it? Chunyan -Ursprüngliche Nachricht- Von: Sascha Beaumont [mailto:sascha.beaum...@gmail.com] Gesendet: Freitag, 23. Oktober 2009 02:31 An: General discussion for Windows Installer XML toolset. Betreff: Re: [WiX-users] How to change shortcut name? Have you thought about using a wix variable to set the shortcut name at compile time, rather than at runtime? i.e. Shortcut/@Name=MyAPP $(var.version) Sascha On Thu, Oct 22, 2009 at 6:30 PM, Jiang, Chunyan (GE Healthcare) chunyan.ji...@ge.com wrote: Hi all, I have defined the shortcut like this: DirectoryRef Id=ShortcutFolder Component Id=DesktopShortcut Guid=D9DFCBA6-C98F-4146-87D9-C4F83349C8EC Shortcut Id=DesktopShortcutMyAPP Name=MyAPP Directory=DesktopFolder Target=[APPLICATIONFOLDER]/MyAPP.exe WorkingDirectory=APPLICATIONFOLDER / RemoveFolder Id=DesktopFolderVPAdmin On=uninstall / RegistryValue Root=HKCU Key=Software\Microsoft\MyAPP Name=installed Type=integer Value=1 KeyPath=yes / /Component /DirectoryRef However, I want to give the shortcut another name, like MyAPP 1.0.0.1, which is the version number. How can I perform it? I know that I can define custom action to change the Product Name, like: CustomAction Id=SetProductName Property=ProductName Value=MyAPP [ProductVersion] Execute=immediate / But it doesn't work for changing shortcut name. How to modify this custom action to fit for shortcut name? Regards, Chunyan -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
[WiX-users] Why isn't my property evaluating??
I'm trying to simulate the InstallURL property of a VS.net install MSI... I've got to the ponit where the WIX MSI will open a browser to the download page that I want it to go to. I thought things were going great because on my test machine, the web page opened when I didn't have the MSXML6 component installed. However things went downhill when I discovered that the web page opened even when I DID have the component installed. I'm searching for the MSXML6 component using a Property w/ a RegistrySearch. However, as best as I can tell, the registry value isn't even being evaluated, and thus it always looks like it isn't installed. Here's the relevant portion of my WXS: Property Id=MSXML6 RegistrySearch Id=MSXML6Search Root=HKCR Key=Msxml2.DOMDocument.6.0 Type=raw / /Property Property Id=TEST RegistrySearch Id=TESTSearch Root=HKLM Type=raw Name=Version Key=SOFTWARE\Microsoft\DirectX / /Property Property Id=cmd.exe Value=cmd.exe / CustomAction Id=OpenMSXML6Download Property=cmd.exe ExeCommand=/c start http://www.microsoft.com/downloads/details.aspx?FamilyID=993c0bcf-3bcf-4 009-be21-27e85e1857b1 Execute=immediate Return=check / CustomAction Id=OpenMSXML6DownloadError Error=This component requires MSXML6. =[MSXML6]=[cmd.exe]=[TEST]= A web browser has been opened to the download page. Please install MSXML6 and then re-install the connector. / !-- installation execution sequence -- InstallExecuteSequence !-- wires the error dialog to the downgrade event -- Custom Action=PreventDowngrading After=FindRelatedProductsNEWPRODUCTFOUND/Custom !-- execution to delete old install info after upgrade-- RemoveExistingProducts After=InstallValidate / !-- Forces MSXML6 to be pre-installed -- !-- Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom -- Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom Custom Action=OpenMSXML6DownloadError After=OpenMSXML6DownloadNOT MSXML6/Custom /InstallExecuteSequence !-- ui information for the custom actions above. -- InstallUISequence Custom Action=PreventDowngrading After=FindRelatedProductsNEWPRODUCTFOUND/Custom Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom Custom Action=OpenMSXML6DownloadError After=OpenMSXML6DownloadNOT MSXML6/Custom /InstallUISequence What this does is if MSXML6 isn't defined then it opens the web page and then prints the custom error message. Note that I'm trying to print the value of the property in the error message (I'm not sure if this is valid or not, but it seems to be.) The text that I see says This component requires MSXML6. ==[cmd.exe]==... so it is printing the value of the 'cmd.exe' property but not the other two... maybe that's because I define the property explicitly, I'm not sure... Anyway, I also ran the MSI with debugging on, and in the log file, I see absolutely no reference at all to the MSXML6 or the TEST properties ever being set. I've confirmed that the registry values are indeed set, although I'm not 100% sure how to handle the Msxml2 registry key, since it doesn't have any real values, only a default value. (I'm assuming that leaving off the 'Name' parameter is the right way to handle this.) Help?? -mdb -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] How to detect files presence and conditionally show a new added dialog page
Hi Blair, As what I mentioned, since our old 2.0 product's uninstaller deletes settings but not remove the setting folder, there is a chance that the setting folder is empty. So we can't detect folder but have to detect *.* by writing a DLL. Anyways, I wrote a small dll and integrated it in the installer. But from the log, the dll is never run. Could you please point out the problem? Here is the Wix code: Property Id=NEED_MIGRATE_SETTING Secure=yes/ Binary Id=DetectSettingMigrationBin SourceFile=DetectSM.dll / CustomAction Id=DetectSettingMigrationCA BinaryKey=DetectSettingMigrationBin DllEntry=DetectSM Execute=firstSequence/ InstallExecuteSequence Custom Action=DetectSettingMigrationCA After=AppSearch / /InstallExecuteSequence In the dll, for testing purpose, I just set the property NEED_MIGRATE_SETTING as 1 for now. But I checked the log, the dll itself is never run. Thanks. /Brian. From: Blair os...@live.com To: General discussion for Windows Installer XML toolset. wix-users@lists.sourceforge.net Sent: Tuesday, October 20, 2009 7:27:41 PM Subject: Re: [WiX-users] How to detect files presence and conditionally show a new added dialog page Can you live with the existence (or lack thereof) of those two settings directories? Does it matter if they are empty or not? I would assume that if the 3.0 one didn't exist but the 2.0 one does, you have a better than even chance you have data to upgrade. Anytime you can use a built-in custom action instead of supplying your own, you tend to improve reliability. However, you can add as many custom actions (and custom action binaries) into your installation package as you wish, up to the size limit of the MSI file (not that you would ever want an MSI file that big). I assume your AppData property is the APPDATA environment variable. If not, change my [%AppData]\ and ensure that the property is defined before the AppSearch action. If it is defined in your Directory table, those properties are not populated until CostFinalize. Note that if Windows Installer defines a path, it always includes the trailing backslash ('\'). If you supply paths via your own custom action, you should do the same. Property Id=SETTINGS_20_EXIST Secure=yes DirectorySearch Id=[%AppData]\MyCompany\MyApp 2.0 Depth=0/ /Property Property Id=SETTINGS_30_EXIST Secure=yes DirectorySearch Id=[%AppData]\MyCompany\MyApp 3.0 Depth=0/ /Property Property Id=NEED_UPGRADE_SETTING Secure=yes/ CustomAction Id=SetNeedUpgradeSetting Property=NEED_UPGRADE_SETTING Value=1 Execute=firstSequence/ InstallUISequence Custom Action=SetNeedUpgradeSetting After=AppSearchSETTINGS_20_EXIST AND NOT SETTINGS_30_EXIST/Custom /InstallUISequence If you can't use mere absence/presence of the folders for your detection routine, don't use any of my code (except for the secure property declaration of NEED_UPDRADE_SETTING) and instead set NEED_UPDRADE_SETTING in your DLL action. Call your action with no condition in your InstallUISequence where I call SetNeedUpgradeSetting. Now, on to the InstallExecuteSequence. I am assuming that your confirmation dialog (MyDlg) has a check box that is associated with the property REALLY_NEED_UPGRADE_SETTING (which sets it to the value 1 if the box is checked). What is your default? Also, if the UI is bypassed, what should the assumed value be? I hope it is the same (checked by default, assumed checked if never shown). That makes your logic easier. You will need to make sure your REALLY_NEED_UPGRADE_SETTING property is also secure. I will assume it is also checked by default. If you are using your DLL instead of simple folder detection you should also set it to Execute=firstSequence. Property Id=REALLY_NEED_UPGRADE_SETTING Secure=yes Value=1/!-- remove 'Value=1' but leave the rest if migrating settings is NOT the default action-- InstallExecuteSequence Custom Action=SetNeedUpgradeSetting After=AppSearchSETTINGS_20_EXIST AND NOT SETTINGS_30_EXIST/Custom!--Note that this is identical to InstallUISequence. That is by design.-- Custom Action=DoSettingUpgrade Before=InstallFinalizeNOT Installed AND REALLY_NEED_UPGRADE_SETTING AND NEED_UPGRADE_SETTING/Custom!-- you may consider removing NOT Installed AND from this condition. Then repairs and minor upgrades will restore your 3.0 settings from the 2.0 ones if they are lost-- /InstallExecuteSequence If your default action and your opt-in/-out experience are different, you will have a bit more complicated logic story, but I will leave that unless you need help with that. -Original Message- From: little.forest [mailto:little.for...@ymail.com] Sent: Tuesday, October 20, 2009 5:40 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to detect files presence and conditionally show a new added dialog page Hi Blair, Thank you so much. I really appreciate your detailed reply. The code example you provided is clear and neat. Basically, we'd like
Re: [WiX-users] Translating from ancient to v3 WiX
Not sure, but could it possibly be this? CustomAction Id=I_DO_SOME_VB_INLINE Script=vbscript![CDATA[SOME-VB-SCRIPT-INLINE]]/CustomAction -Original Message- From: John Cooper (Collabera) [mailto:a-jc...@microsoft.com] Sent: Friday, October 23, 2009 12:56 PM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Translating from ancient to v3 WiX I'm translating some v1 and v2 WiX files to v3 Wix, but I'm having trouble dealing with a CustomAction construct. In the old source I'll see: CustomAction Directory= VBScriptCall=SOME-VB-SCRIPT-INLINE Id=I_DO_SOME_VB_INLINE Now, after passing the file through wixcop -f and doing some editing, candle reports that Directory is inappropriate for several reasons. Candle also reports that this CA needs a BinaryKey, FileKey, or Property. What v3 construct would best mimic the archaic behavior above? -- John M. Cooper Collabera at Microsoft -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Build time Component.wxs generation...
With -ag, you don't necessarily need a checked in copy, although a reference copy in your build dump couldn't hurt. -gg is only recommended if you run heat just one time on the involved file and never ever run it again (you just maintain the authoring manually from then on). Even if you never intend to patch, it is still not a good idea for the same component with the same filename in the same directory to ever have a different guid. Changing from -gg to -ag is just as bad. Once you have used -gg you need to check that in and never change the guid again. I hope you haven't shipped yet. -Original Message- From: Tony [mailto:yellowjacketl...@gmail.com] Sent: Friday, October 23, 2009 9:45 AM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Build time Component.wxs generation... The would be output to changed if files were added/removed, which is what I'm mostly concerned about. Web developer adds 5 more aspx pages and the next build's websitecomponents.wxs file will now be different than the previous version. But do I need a checked in copy of a build time generated file?? On Fri, Oct 23, 2009 at 12:32 PM, Brian Rogers rogers.br...@gmail.com wrote: Hey Tony, The GUID generation for -ag doesn't actually occur until Bind time. So, there would be no output for you to check in. Take a look at the Binder.cs and SetComponentGuids(Output output) method for more details. Thanks, Brian Rogers Intelligence removes complexity. - Me http://blogs.msdn.com/icumove -- NEW On Fri, Oct 23, 2009 at 8:26 AM, Tony yellowjacketl...@gmail.com wrote: Yeah, I guess we give up the ability patch. Though we've never done that before. Guess that's something for management to decide. We currently use the -gg option on one feature that would never be patched. Though, I guess, -ag would accomplish the same behavior since -gg generates new guids as well. Do you check-in the auto-generated component.wxs file? Or just check-in an empty sub file? On Thu, Oct 22, 2009 at 4:46 PM, Blair os...@live.com wrote: Use heat.exe with -ag and always use Major Upgrade (Product Id='*'), never patch. -Original Message- From: Tony [mailto:yellowjacketl...@gmail.com] Sent: Thursday, October 22, 2009 12:56 PM To: WiX Users Subject: [WiX-users] Build time Component.wxs generation... I'm aware of heat.exe and we have used to to seed our component.wxs files for our various wixlibs, but how do you deal with features like websites and help systems which often have dozens of files added at any time during development cycles? Re-running heat can work, sort of, it will change the component guids, but leaves the component Ids of existing components alone. Not sure how it deals with removed components. I stumbled across this 3rd party tool called Paraffin that appears to solve this issue, but have not attempted to put it to use in our build environment. What have others used to deal with features that often have an ever growing (and sometimes shrinking) list of components? -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer
Re: [WiX-users] Property-RegistrySearch during uninstall
Yes, it is. -Original Message- From: Tony [mailto:yellowjacketl...@gmail.com] Sent: Friday, October 23, 2009 11:10 AM To: WiX Users Subject: [WiX-users] Property-RegistrySearch during uninstall Is Property--RegistrySearch evaluated during uninstall as well? I'd like to set a property's value to a registry value during uninstall. IOW, I need to use a value found in the registry during uninstall. -- Tony -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Blocking install if property isn't set
If you have a custom action that validates your property and returns failure if it doesn't validate, run that custom action as Execute=immediate and schedule it in both InstallUISequence AND InstallExecuteSequence (so it runs up to twice). Make sure that the property you check is a secure property, which means it also must be a public property, so that it can be passed from the UI sequence to the execute sequence so it doesn't fail then. Condition that action in both sequences on NOT Installed so it doesn't block uninstalls/upgrades/repairs/etc. -Original Message- From: Dan Giambalvo [mailto:danie...@microsoft.com] Sent: Friday, October 23, 2009 12:37 PM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Blocking install if property isn't set Our installer has some UI which requests and validates a product key from the user during InstallUISequence. I want to add an additional checks so that if some clever user tries to silently install our msi to bypass the UI (and hence the validation UI) that they install will fail. I have a private property in the installer which I can check to know if we've successfully validated a key, I'm just not sure how to make the entire InstallExecute sequence contingent on it (and only so on clean installs, but not uninstalls/upgrades/repairs/etc.) I'm guessing there's a right way to do this. Can anyone tell me what it is? Thanks! -Dan -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Why isn't my property evaluating??
Add Secure=yes to your Property Id=MSXML6 element (Property Id=MSXML6 Secure=yes) AppSearch runs as if it were marked Execute=oncePerProcess, so once it runs in InstallUISequence, it won't run again in InstallExecuteSequence. Because MSXML6 isn't a secure property, it isn't always communicated from the UI sequence to the server. BTW: It's usually considered a bad idea to open web browsers from InstallExecuteSequence. UI should be confined to the UI sequence, with the singular exception of using MsiProcessMessage (or equivalent API) to send error messages from CAs running in InstallExecuteSequence. The CustomAction Error=.../ actions are acceptable in either sequence since it does the same thing (a MsiProcessMessage-like action). -Original Message- From: Michael Bray [mailto:mb...@ctiusa.com] Sent: Friday, October 23, 2009 3:23 PM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Why isn't my property evaluating?? I'm trying to simulate the InstallURL property of a VS.net install MSI... I've got to the ponit where the WIX MSI will open a browser to the download page that I want it to go to. I thought things were going great because on my test machine, the web page opened when I didn't have the MSXML6 component installed. However things went downhill when I discovered that the web page opened even when I DID have the component installed. I'm searching for the MSXML6 component using a Property w/ a RegistrySearch. However, as best as I can tell, the registry value isn't even being evaluated, and thus it always looks like it isn't installed. Here's the relevant portion of my WXS: Property Id=MSXML6 RegistrySearch Id=MSXML6Search Root=HKCR Key=Msxml2.DOMDocument.6.0 Type=raw / /Property Property Id=TEST RegistrySearch Id=TESTSearch Root=HKLM Type=raw Name=Version Key=SOFTWARE\Microsoft\DirectX / /Property Property Id=cmd.exe Value=cmd.exe / CustomAction Id=OpenMSXML6Download Property=cmd.exe ExeCommand=/c start http://www.microsoft.com/downloads/details.aspx?FamilyID=993c0bcf-3bcf-4 009-be21-27e85e1857b1 Execute=immediate Return=check / CustomAction Id=OpenMSXML6DownloadError Error=This component requires MSXML6. =[MSXML6]=[cmd.exe]=[TEST]= A web browser has been opened to the download page. Please install MSXML6 and then re-install the connector. / !-- installation execution sequence -- InstallExecuteSequence !-- wires the error dialog to the downgrade event -- Custom Action=PreventDowngrading After=FindRelatedProductsNEWPRODUCTFOUND/Custom !-- execution to delete old install info after upgrade-- RemoveExistingProducts After=InstallValidate / !-- Forces MSXML6 to be pre-installed -- !-- Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom -- Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom Custom Action=OpenMSXML6DownloadError After=OpenMSXML6DownloadNOT MSXML6/Custom /InstallExecuteSequence !-- ui information for the custom actions above. -- InstallUISequence Custom Action=PreventDowngrading After=FindRelatedProductsNEWPRODUCTFOUND/Custom Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom Custom Action=OpenMSXML6DownloadError After=OpenMSXML6DownloadNOT MSXML6/Custom /InstallUISequence What this does is if MSXML6 isn't defined then it opens the web page and then prints the custom error message. Note that I'm trying to print the value of the property in the error message (I'm not sure if this is valid or not, but it seems to be.) The text that I see says This component requires MSXML6. ==[cmd.exe]==... so it is printing the value of the 'cmd.exe' property but not the other two... maybe that's because I define the property explicitly, I'm not sure... Anyway, I also ran the MSI with debugging on, and in the log file, I see absolutely no reference at all to the MSXML6 or the TEST properties ever being set. I've confirmed that the registry values are indeed set, although I'm not 100% sure how to handle the Msxml2 registry key, since it doesn't have any real values, only a default value. (I'm assuming that leaving off the 'Name' parameter is the right way to handle this.) Help?? -mdb -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net
Re: [WiX-users] Blocking install if property isn't set
If I make it public, can't someone just pass it in from the command line then? Doesn't that similarly defeat the purpose? -Original Message- From: Blair [mailto:os...@live.com] Sent: Friday, October 23, 2009 5:22 PM To: 'General discussion for Windows Installer XML toolset.' Subject: Re: [WiX-users] Blocking install if property isn't set If you have a custom action that validates your property and returns failure if it doesn't validate, run that custom action as Execute=immediate and schedule it in both InstallUISequence AND InstallExecuteSequence (so it runs up to twice). Make sure that the property you check is a secure property, which means it also must be a public property, so that it can be passed from the UI sequence to the execute sequence so it doesn't fail then. Condition that action in both sequences on NOT Installed so it doesn't block uninstalls/upgrades/repairs/etc. -Original Message- From: Dan Giambalvo [mailto:danie...@microsoft.com] Sent: Friday, October 23, 2009 12:37 PM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Blocking install if property isn't set Our installer has some UI which requests and validates a product key from the user during InstallUISequence. I want to add an additional checks so that if some clever user tries to silently install our msi to bypass the UI (and hence the validation UI) that they install will fail. I have a private property in the installer which I can check to know if we've successfully validated a key, I'm just not sure how to make the entire InstallExecute sequence contingent on it (and only so on clean installs, but not uninstalls/upgrades/repairs/etc.) I'm guessing there's a right way to do this. Can anyone tell me what it is? Thanks! -Dan -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] How to detect files presence and conditionally show a new added dialog page
Did you try scheduling the custom action in both InstallUISequence as well as InstallExecuteSequence? -Original Message- From: little.forest [mailto:little.for...@ymail.com] Sent: Friday, October 23, 2009 5:01 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to detect files presence and conditionally show a new added dialog page Hi Blair, As what I mentioned, since our old 2.0 product's uninstaller deletes settings but not remove the setting folder, there is a chance that the setting folder is empty. So we can't detect folder but have to detect *.* by writing a DLL. Anyways, I wrote a small dll and integrated it in the installer. But from the log, the dll is never run. Could you please point out the problem? Here is the Wix code: Property Id=NEED_MIGRATE_SETTING Secure=yes/ Binary Id=DetectSettingMigrationBin SourceFile=DetectSM.dll / CustomAction Id=DetectSettingMigrationCA BinaryKey=DetectSettingMigrationBin DllEntry=DetectSM Execute=firstSequence/ InstallExecuteSequence Custom Action=DetectSettingMigrationCA After=AppSearch / /InstallExecuteSequence In the dll, for testing purpose, I just set the property NEED_MIGRATE_SETTING as 1 for now. But I checked the log, the dll itself is never run. Thanks. /Brian. From: Blair os...@live.com To: General discussion for Windows Installer XML toolset. wix-users@lists.sourceforge.net Sent: Tuesday, October 20, 2009 7:27:41 PM Subject: Re: [WiX-users] How to detect files presence and conditionally show a new added dialog page Can you live with the existence (or lack thereof) of those two settings directories? Does it matter if they are empty or not? I would assume that if the 3.0 one didn't exist but the 2.0 one does, you have a better than even chance you have data to upgrade. Anytime you can use a built-in custom action instead of supplying your own, you tend to improve reliability. However, you can add as many custom actions (and custom action binaries) into your installation package as you wish, up to the size limit of the MSI file (not that you would ever want an MSI file that big). I assume your AppData property is the APPDATA environment variable. If not, change my [%AppData]\ and ensure that the property is defined before the AppSearch action. If it is defined in your Directory table, those properties are not populated until CostFinalize. Note that if Windows Installer defines a path, it always includes the trailing backslash ('\'). If you supply paths via your own custom action, you should do the same. Property Id=SETTINGS_20_EXIST Secure=yes DirectorySearch Id=[%AppData]\MyCompany\MyApp 2.0 Depth=0/ /Property Property Id=SETTINGS_30_EXIST Secure=yes DirectorySearch Id=[%AppData]\MyCompany\MyApp 3.0 Depth=0/ /Property Property Id=NEED_UPGRADE_SETTING Secure=yes/ CustomAction Id=SetNeedUpgradeSetting Property=NEED_UPGRADE_SETTING Value=1 Execute=firstSequence/ InstallUISequence Custom Action=SetNeedUpgradeSetting After=AppSearchSETTINGS_20_EXIST AND NOT SETTINGS_30_EXIST/Custom /InstallUISequence If you can't use mere absence/presence of the folders for your detection routine, don't use any of my code (except for the secure property declaration of NEED_UPDRADE_SETTING) and instead set NEED_UPDRADE_SETTING in your DLL action. Call your action with no condition in your InstallUISequence where I call SetNeedUpgradeSetting. Now, on to the InstallExecuteSequence. I am assuming that your confirmation dialog (MyDlg) has a check box that is associated with the property REALLY_NEED_UPGRADE_SETTING (which sets it to the value 1 if the box is checked). What is your default? Also, if the UI is bypassed, what should the assumed value be? I hope it is the same (checked by default, assumed checked if never shown). That makes your logic easier. You will need to make sure your REALLY_NEED_UPGRADE_SETTING property is also secure. I will assume it is also checked by default. If you are using your DLL instead of simple folder detection you should also set it to Execute=firstSequence. Property Id=REALLY_NEED_UPGRADE_SETTING Secure=yes Value=1/!-- remove 'Value=1' but leave the rest if migrating settings is NOT the default action-- InstallExecuteSequence Custom Action=SetNeedUpgradeSetting After=AppSearchSETTINGS_20_EXIST AND NOT SETTINGS_30_EXIST/Custom!--Note that this is identical to InstallUISequence. That is by design.-- Custom Action=DoSettingUpgrade Before=InstallFinalizeNOT Installed AND REALLY_NEED_UPGRADE_SETTING AND NEED_UPGRADE_SETTING/Custom!-- you may consider removing NOT Installed AND from this condition. Then repairs and minor upgrades will restore your 3.0 settings from the 2.0 ones if they are lost-- /InstallExecuteSequence If your default action and your opt-in/-out experience are different, you will have a bit more complicated logic story, but I will leave that unless you need help with that. -Original Message- From: little.forest
Re: [WiX-users] Why isn't my property evaluating??
Doesn't seem to help... It still doesn't detect the registry key correctly and the output text seems to indicate that the value is empty for both MSXML6 and TEST properties. -mdb -Original Message- From: Blair [mailto:os...@live.com] Sent: Friday, October 23, 2009 8:31 PM To: 'General discussion for Windows Installer XML toolset.' Subject: Re: [WiX-users] Why isn't my property evaluating?? Add Secure=yes to your Property Id=MSXML6 element (Property Id=MSXML6 Secure=yes) AppSearch runs as if it were marked Execute=oncePerProcess, so once it runs in InstallUISequence, it won't run again in InstallExecuteSequence. Because MSXML6 isn't a secure property, it isn't always communicated from the UI sequence to the server. BTW: It's usually considered a bad idea to open web browsers from InstallExecuteSequence. UI should be confined to the UI sequence, with the singular exception of using MsiProcessMessage (or equivalent API) to send error messages from CAs running in InstallExecuteSequence. The CustomAction Error=.../ actions are acceptable in either sequence since it does the same thing (a MsiProcessMessage-like action). -Original Message- From: Michael Bray [mailto:mb...@ctiusa.com] Sent: Friday, October 23, 2009 3:23 PM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Why isn't my property evaluating?? I'm trying to simulate the InstallURL property of a VS.net install MSI... I've got to the ponit where the WIX MSI will open a browser to the download page that I want it to go to. I thought things were going great because on my test machine, the web page opened when I didn't have the MSXML6 component installed. However things went downhill when I discovered that the web page opened even when I DID have the component installed. I'm searching for the MSXML6 component using a Property w/ a RegistrySearch. However, as best as I can tell, the registry value isn't even being evaluated, and thus it always looks like it isn't installed. Here's the relevant portion of my WXS: Property Id=MSXML6 RegistrySearch Id=MSXML6Search Root=HKCR Key=Msxml2.DOMDocument.6.0 Type=raw / /Property Property Id=TEST RegistrySearch Id=TESTSearch Root=HKLM Type=raw Name=Version Key=SOFTWARE\Microsoft\DirectX / /Property Property Id=cmd.exe Value=cmd.exe / CustomAction Id=OpenMSXML6Download Property=cmd.exe ExeCommand=/c start http://www.microsoft.com/downloads/details.aspx?FamilyID=993c0bcf-3bcf-4 009-be21-27e85e1857b1 Execute=immediate Return=check / CustomAction Id=OpenMSXML6DownloadError Error=This component requires MSXML6. =[MSXML6]=[cmd.exe]=[TEST]= A web browser has been opened to the download page. Please install MSXML6 and then re-install the connector. / !-- installation execution sequence -- InstallExecuteSequence !-- wires the error dialog to the downgrade event -- Custom Action=PreventDowngrading After=FindRelatedProductsNEWPRODUCTFOUND/Custom !-- execution to delete old install info after upgrade-- RemoveExistingProducts After=InstallValidate / !-- Forces MSXML6 to be pre-installed -- !-- Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom -- Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom Custom Action=OpenMSXML6DownloadError After=OpenMSXML6DownloadNOT MSXML6/Custom /InstallExecuteSequence !-- ui information for the custom actions above. -- InstallUISequence Custom Action=PreventDowngrading After=FindRelatedProductsNEWPRODUCTFOUND/Custom Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom Custom Action=OpenMSXML6DownloadError After=OpenMSXML6DownloadNOT MSXML6/Custom /InstallUISequence What this does is if MSXML6 isn't defined then it opens the web page and then prints the custom error message. Note that I'm trying to print the value of the property in the error message (I'm not sure if this is valid or not, but it seems to be.) The text that I see says This component requires MSXML6. ==[cmd.exe]==... so it is printing the value of the 'cmd.exe' property but not the other two... maybe that's because I define the property explicitly, I'm not sure... Anyway, I also ran the MSI with debugging on, and in the log file, I see absolutely no reference at all to the MSXML6 or the TEST properties ever being set. I've confirmed that the registry values are indeed set, although I'm not 100% sure how to handle the Msxml2 registry key, since it doesn't have any real values, only a default value. (I'm assuming that leaving off the 'Name' parameter is the right way to handle this.) Help?? -mdb -- Come build with us! The
Re: [WiX-users] How to detect files presence and conditionally show a new added dialog page
Aha, you're right. I didn't schedule the CA in InstallUISequence. Sorry. After add it in InstallUISequence, it seems working. Thanks and have a good weekend! /Brian From: Blair os...@live.com To: General discussion for Windows Installer XML toolset. wix-users@lists.sourceforge.net Sent: Friday, October 23, 2009 5:34:05 PM Subject: Re: [WiX-users] How to detect files presence and conditionally show a new added dialog page Did you try scheduling the custom action in both InstallUISequence as well as InstallExecuteSequence? -Original Message- From: little.forest [mailto:little.for...@ymail.com] Sent: Friday, October 23, 2009 5:01 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] How to detect files presence and conditionally show a new added dialog page Hi Blair, As what I mentioned, since our old 2.0 product's uninstaller deletes settings but not remove the setting folder, there is a chance that the setting folder is empty. So we can't detect folder but have to detect *.* by writing a DLL. Anyways, I wrote a small dll and integrated it in the installer. But from the log, the dll is never run. Could you please point out the problem? Here is the Wix code: Property Id=NEED_MIGRATE_SETTING Secure=yes/ Binary Id=DetectSettingMigrationBin SourceFile=DetectSM.dll / CustomAction Id=DetectSettingMigrationCA BinaryKey=DetectSettingMigrationBin DllEntry=DetectSM Execute=firstSequence/ InstallExecuteSequence Custom Action=DetectSettingMigrationCA After=AppSearch / /InstallExecuteSequence In the dll, for testing purpose, I just set the property NEED_MIGRATE_SETTING as 1 for now. But I checked the log, the dll itself is never run. Thanks. /Brian. From: Blair os...@live.com To: General discussion for Windows Installer XML toolset. wix-users@lists.sourceforge.net Sent: Tuesday, October 20, 2009 7:27:41 PM Subject: Re: [WiX-users] How to detect files presence and conditionally show a new added dialog page Can you live with the existence (or lack thereof) of those two settings directories? Does it matter if they are empty or not? I would assume that if the 3.0 one didn't exist but the 2.0 one does, you have a better than even chance you have data to upgrade. Anytime you can use a built-in custom action instead of supplying your own, you tend to improve reliability. However, you can add as many custom actions (and custom action binaries) into your installation package as you wish, up to the size limit of the MSI file (not that you would ever want an MSI file that big). I assume your AppData property is the APPDATA environment variable. If not, change my [%AppData]\ and ensure that the property is defined before the AppSearch action. If it is defined in your Directory table, those properties are not populated until CostFinalize. Note that if Windows Installer defines a path, it always includes the trailing backslash ('\'). If you supply paths via your own custom action, you should do the same. Property Id=SETTINGS_20_EXIST Secure=yes DirectorySearch Id=[%AppData]\MyCompany\MyApp 2.0 Depth=0/ /Property Property Id=SETTINGS_30_EXIST Secure=yes DirectorySearch Id=[%AppData]\MyCompany\MyApp 3.0 Depth=0/ /Property Property Id=NEED_UPGRADE_SETTING Secure=yes/ CustomAction Id=SetNeedUpgradeSetting Property=NEED_UPGRADE_SETTING Value=1 Execute=firstSequence/ InstallUISequence Custom Action=SetNeedUpgradeSetting After=AppSearchSETTINGS_20_EXIST AND NOT SETTINGS_30_EXIST/Custom /InstallUISequence If you can't use mere absence/presence of the folders for your detection routine, don't use any of my code (except for the secure property declaration of NEED_UPDRADE_SETTING) and instead set NEED_UPDRADE_SETTING in your DLL action. Call your action with no condition in your InstallUISequence where I call SetNeedUpgradeSetting. Now, on to the InstallExecuteSequence. I am assuming that your confirmation dialog (MyDlg) has a check box that is associated with the property REALLY_NEED_UPGRADE_SETTING (which sets it to the value 1 if the box is checked). What is your default? Also, if the UI is bypassed, what should the assumed value be? I hope it is the same (checked by default, assumed checked if never shown). That makes your logic easier. You will need to make sure your REALLY_NEED_UPGRADE_SETTING property is also secure. I will assume it is also checked by default. If you are using your DLL instead of simple folder detection you should also set it to Execute=firstSequence. Property Id=REALLY_NEED_UPGRADE_SETTING Secure=yes Value=1/!-- remove 'Value=1' but leave the rest if migrating settings is NOT the default action-- InstallExecuteSequence Custom Action=SetNeedUpgradeSetting After=AppSearchSETTINGS_20_EXIST AND NOT SETTINGS_30_EXIST/Custom!--Note that this is identical to InstallUISequence. That is by design.-- Custom Action=DoSettingUpgrade Before=InstallFinalizeNOT Installed AND
Re: [WiX-users] Blocking install if property isn't set
You still validate it and fail the install if it doesn't pass that validation. If someone runs the MSI silently your UI never runs anyway. The commandline is how they would pass what they would have typed into the UI. -Original Message- From: Dan Giambalvo [mailto:danie...@microsoft.com] Sent: Friday, October 23, 2009 5:32 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Blocking install if property isn't set If I make it public, can't someone just pass it in from the command line then? Doesn't that similarly defeat the purpose? -Original Message- From: Blair [mailto:os...@live.com] Sent: Friday, October 23, 2009 5:22 PM To: 'General discussion for Windows Installer XML toolset.' Subject: Re: [WiX-users] Blocking install if property isn't set If you have a custom action that validates your property and returns failure if it doesn't validate, run that custom action as Execute=immediate and schedule it in both InstallUISequence AND InstallExecuteSequence (so it runs up to twice). Make sure that the property you check is a secure property, which means it also must be a public property, so that it can be passed from the UI sequence to the execute sequence so it doesn't fail then. Condition that action in both sequences on NOT Installed so it doesn't block uninstalls/upgrades/repairs/etc. -Original Message- From: Dan Giambalvo [mailto:danie...@microsoft.com] Sent: Friday, October 23, 2009 12:37 PM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Blocking install if property isn't set Our installer has some UI which requests and validates a product key from the user during InstallUISequence. I want to add an additional checks so that if some clever user tries to silently install our msi to bypass the UI (and hence the validation UI) that they install will fail. I have a private property in the installer which I can check to know if we've successfully validated a key, I'm just not sure how to make the entire InstallExecute sequence contingent on it (and only so on clean installs, but not uninstalls/upgrades/repairs/etc.) I'm guessing there's a right way to do this. Can anyone tell me what it is? Thanks! -Dan -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
[WiX-users] Blog: UI Custom Action Guidelins (and one Workaround)
This blog post describes some guidelines for UI custom actions, including one workaround. The topics discussed have come up on this mailing list on more than one occasion. UI Custom Action Guidelines http://wp.me/pyVNs-gc Windows Installer provides a rich set of standard actions that handle the typical needs of an installation: installing files and folders, manipulating the registry, searching for existing resources in the registry or the file system, controlling Windows services and so-on. Custom actions are handy things for when you need to do some custom processing that isnt covered by one of the standard actions. You can customize your UI experience by invoking an action when the user interacts with a control by publishing a DoAction control event for the control. This post describes some guidelines (and one workaround) for custom actions invoked by the user interface in a Windows Installer MSI package. -- The Direct3D Graphics Pipeline -- DirectX 9 draft available for download http://legalizeadulthood.wordpress.com/the-direct3d-graphics-pipeline/ Legalize Adulthood! http://legalizeadulthood.wordpress.com -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
[WiX-users] How do I add both a HKLM and a HKCU key to the registry?
During install, I am trying to add both an HKLM key and an HKCU key for my product. My wxs looks like the below. When this compiles I get the error ICE57: Component 'C_HKCU_RegistryEntries' has both per-user and per-machine data with a per-machine KeyPath . I have both components in the features element and since I have these defined are separate components I do not understand why this does not work. Any suggestions much appreciated. Thanks, Dave !-- Define the directory structure. -- Directory Id=TARGETDIR Name=SourceDir !-- add our root registry entries -- Component Id=C_HKLM_RegistryEntries Guid=xxx RegistryKey Root=HKLM Key=Software\[MYCOMPANYNAME]\[MYPRODUCTROOT]\Manager Action=createAndRemoveOnUninstall /RegistryKey /Component Component Id=C_HKCU_RegistryEntries Guid=xxx RegistryKey Root=HKCU Key=Software\[MYCOMPANYNAME]\[MYPRODUCTROOT]\Manager Action=createAndRemoveOnUninstall /RegistryKey /Component __ Information from ESET NOD32 Antivirus, version of virus signature database 4537 (20091023) __ The message was checked by ESET NOD32 Antivirus. http://www.eset.com -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
[WiX-users] Custom Action: MsiQueryProductState call failing
This might be off topic, and if so could someone point me to a good resource for discussing the Msi WIN32 API? I have a custom action that is being called, but is failing. Does anyone know why the following would return an rc value of INSTALLSTATE_INVALIDARG? I'm passing in a GUID, so I'm not sure what it's complaining about. LPCTSTR szProductID = 2EA19080-E744-4B5C-8EF7-488342F9847C; // GUID modified to protect the innocent UINT rc = MsiQueryProductState(szProductID); I know the custom action is getting called because I have an error message dialog popping up that is instantiated inside the custom action. I've tried calling the custom action from both the InstallExecuteSequence and from the InstallUISequence. E.g. these are the snippets I've tried (not at the same time): InstallExecuteSequence Custom Action='Ver200Validation' After='FindRelatedProducts'/ /InstallExecuteSequence InstallUISequence Custom Action=Ver200Validation After=AppSearch / /InstallUISequence Thanks for the help, Craig -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Blocking install if property isn't set
So he problem here is that the CustomAction cannot be allowed to run twice. It actually connects to a server, and decrements a server-side count. So, we only want to do that once per install. So, the way I see it, I have two options: 1) The UI Sequence runs the CA, and sets some *private* flag that cannot be passed from the command line like KeyValid. The InstallExecuteSequence checks that that is valid, and then only runs the CA if it is not set based on a public PRODUCTKEY flag. The key here is that I need to be able to pass that value from the UI to the Execute sequence, but it cannot be command-line passable. If it is, someone could just run the install silently and pass KEYVALID=1. 2) We somehow disallow silent installs completely. We are completely 100% fine with this, if there is some way to do it. I would just want to be sure silent uninstall is possible (for the upgrade scenario.) One might suggest we only run the CA in InstallExecute only, but that doesn't work because we want a flow where we verify the key and the user has a chance to correct it in the UI. -Dan -Original Message- From: Blair [mailto:os...@live.com] Sent: Friday, October 23, 2009 6:06 PM To: 'General discussion for Windows Installer XML toolset.' Subject: Re: [WiX-users] Blocking install if property isn't set You still validate it and fail the install if it doesn't pass that validation. If someone runs the MSI silently your UI never runs anyway. The commandline is how they would pass what they would have typed into the UI. -Original Message- From: Dan Giambalvo [mailto:danie...@microsoft.com] Sent: Friday, October 23, 2009 5:32 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Blocking install if property isn't set If I make it public, can't someone just pass it in from the command line then? Doesn't that similarly defeat the purpose? -Original Message- From: Blair [mailto:os...@live.com] Sent: Friday, October 23, 2009 5:22 PM To: 'General discussion for Windows Installer XML toolset.' Subject: Re: [WiX-users] Blocking install if property isn't set If you have a custom action that validates your property and returns failure if it doesn't validate, run that custom action as Execute=immediate and schedule it in both InstallUISequence AND InstallExecuteSequence (so it runs up to twice). Make sure that the property you check is a secure property, which means it also must be a public property, so that it can be passed from the UI sequence to the execute sequence so it doesn't fail then. Condition that action in both sequences on NOT Installed so it doesn't block uninstalls/upgrades/repairs/etc. -Original Message- From: Dan Giambalvo [mailto:danie...@microsoft.com] Sent: Friday, October 23, 2009 12:37 PM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Blocking install if property isn't set Our installer has some UI which requests and validates a product key from the user during InstallUISequence. I want to add an additional checks so that if some clever user tries to silently install our msi to bypass the UI (and hence the validation UI) that they install will fail. I have a private property in the installer which I can check to know if we've successfully validated a key, I'm just not sure how to make the entire InstallExecute sequence contingent on it (and only so on clean installs, but not uninstalls/upgrades/repairs/etc.) I'm guessing there's a right way to do this. Can anyone tell me what it is? Thanks! -Dan -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and
Re: [WiX-users] Custom Action: MsiQueryProductState call failing
I think the GUID needs curly braces around it to be recognized by the Windows Installer. On Fri, Oct 23, 2009 at 7:33 PM, Craig Miller craig.mil...@spatialminds.com wrote: This might be off topic, and if so could someone point me to a good resource for discussing the Msi WIN32 API? I have a custom action that is being called, but is failing. Does anyone know why the following would return an rc value of INSTALLSTATE_INVALIDARG? I'm passing in a GUID, so I'm not sure what it's complaining about. LPCTSTR szProductID = 2EA19080-E744-4B5C-8EF7-488342F9847C; // GUID modified to protect the innocent UINT rc = MsiQueryProductState(szProductID); I know the custom action is getting called because I have an error message dialog popping up that is instantiated inside the custom action. I've tried calling the custom action from both the InstallExecuteSequence and from the InstallUISequence. E.g. these are the snippets I've tried (not at the same time): InstallExecuteSequence Custom Action='Ver200Validation' After='FindRelatedProducts'/ /InstallExecuteSequence InstallUISequence Custom Action=Ver200Validation After=AppSearch / /InstallUISequence Thanks for the help, Craig -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- virtually, Rob Mensching - http://RobMensching.com LLC -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
[WiX-users] Invitation from Akash!
Hi General discussion for Windows Installer XML tools, Windows 7 has landed. Don't miss out on your chance to get a copy at: http://www.Windows7Giveaway.com Regards, Akash, 911ak...@gmail.com -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] How do I add both a HKLM and a HKCU key to the registry?
Try adding KeyPath=yes to each of your two RegistryKey elements. -Original Message- From: Dave Kolb [mailto:d...@dotnetcodeslingers.com] Sent: Friday, October 23, 2009 6:34 PM To: 'General discussion for Windows Installer XML toolset.' Subject: [WiX-users] How do I add both a HKLM and a HKCU key to the registry? During install, I am trying to add both an HKLM key and an HKCU key for my product. My wxs looks like the below. When this compiles I get the error ICE57: Component 'C_HKCU_RegistryEntries' has both per-user and per-machine data with a per-machine KeyPath . I have both components in the features element and since I have these defined are separate components I do not understand why this does not work. Any suggestions much appreciated. Thanks, Dave !-- Define the directory structure. -- Directory Id=TARGETDIR Name=SourceDir !-- add our root registry entries -- Component Id=C_HKLM_RegistryEntries Guid=xxx RegistryKey Root=HKLM Key=Software\[MYCOMPANYNAME]\[MYPRODUCTROOT]\Manager Action=createAndRemoveOnUninstall /RegistryKey /Component Component Id=C_HKCU_RegistryEntries Guid=xxx RegistryKey Root=HKCU Key=Software\[MYCOMPANYNAME]\[MYPRODUCTROOT]\Manager Action=createAndRemoveOnUninstall /RegistryKey /Component __ Information from ESET NOD32 Antivirus, version of virus signature database 4537 (20091023) __ The message was checked by ESET NOD32 Antivirus. http://www.eset.com -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users
Re: [WiX-users] Why isn't my property evaluating??
Ah!! I figured it out... It's because the CustomAction was executing before AppSearch (because I had After=FindRelatedProducts)! Once I specified After=AppSearch it works great... -mdb -Original Message- From: Michael Bray Sent: Friday, October 23, 2009 8:41 PM To: General discussion for Windows Installer XML toolset. Subject: RE: [WiX-users] Why isn't my property evaluating?? Doesn't seem to help... It still doesn't detect the registry key correctly and the output text seems to indicate that the value is empty for both MSXML6 and TEST properties. -mdb -Original Message- From: Blair [mailto:os...@live.com] Sent: Friday, October 23, 2009 8:31 PM To: 'General discussion for Windows Installer XML toolset.' Subject: Re: [WiX-users] Why isn't my property evaluating?? Add Secure=yes to your Property Id=MSXML6 element (Property Id=MSXML6 Secure=yes) AppSearch runs as if it were marked Execute=oncePerProcess, so once it runs in InstallUISequence, it won't run again in InstallExecuteSequence. Because MSXML6 isn't a secure property, it isn't always communicated from the UI sequence to the server. BTW: It's usually considered a bad idea to open web browsers from InstallExecuteSequence. UI should be confined to the UI sequence, with the singular exception of using MsiProcessMessage (or equivalent API) to send error messages from CAs running in InstallExecuteSequence. The CustomAction Error=.../ actions are acceptable in either sequence since it does the same thing (a MsiProcessMessage-like action). -Original Message- From: Michael Bray [mailto:mb...@ctiusa.com] Sent: Friday, October 23, 2009 3:23 PM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Why isn't my property evaluating?? I'm trying to simulate the InstallURL property of a VS.net install MSI... I've got to the ponit where the WIX MSI will open a browser to the download page that I want it to go to. I thought things were going great because on my test machine, the web page opened when I didn't have the MSXML6 component installed. However things went downhill when I discovered that the web page opened even when I DID have the component installed. I'm searching for the MSXML6 component using a Property w/ a RegistrySearch. However, as best as I can tell, the registry value isn't even being evaluated, and thus it always looks like it isn't installed. Here's the relevant portion of my WXS: Property Id=MSXML6 RegistrySearch Id=MSXML6Search Root=HKCR Key=Msxml2.DOMDocument.6.0 Type=raw / /Property Property Id=TEST RegistrySearch Id=TESTSearch Root=HKLM Type=raw Name=Version Key=SOFTWARE\Microsoft\DirectX / /Property Property Id=cmd.exe Value=cmd.exe / CustomAction Id=OpenMSXML6Download Property=cmd.exe ExeCommand=/c start http://www.microsoft.com/downloads/details.aspx?FamilyID=993c0bcf-3bcf-4 009-be21-27e85e1857b1 Execute=immediate Return=check / CustomAction Id=OpenMSXML6DownloadError Error=This component requires MSXML6. =[MSXML6]=[cmd.exe]=[TEST]= A web browser has been opened to the download page. Please install MSXML6 and then re-install the connector. / !-- installation execution sequence -- InstallExecuteSequence !-- wires the error dialog to the downgrade event -- Custom Action=PreventDowngrading After=FindRelatedProductsNEWPRODUCTFOUND/Custom !-- execution to delete old install info after upgrade-- RemoveExistingProducts After=InstallValidate / !-- Forces MSXML6 to be pre-installed -- !-- Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom -- Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom Custom Action=OpenMSXML6DownloadError After=OpenMSXML6DownloadNOT MSXML6/Custom /InstallExecuteSequence !-- ui information for the custom actions above. -- InstallUISequence Custom Action=PreventDowngrading After=FindRelatedProductsNEWPRODUCTFOUND/Custom Custom Action=OpenMSXML6Download Before=FindRelatedProductsNOT MSXML6/Custom Custom Action=OpenMSXML6DownloadError After=OpenMSXML6DownloadNOT MSXML6/Custom /InstallUISequence What this does is if MSXML6 isn't defined then it opens the web page and then prints the custom error message. Note that I'm trying to print the value of the property in the error message (I'm not sure if this is valid or not, but it seems to be.) The text that I see says This component requires MSXML6. ==[cmd.exe]==... so it is printing the value of the 'cmd.exe' property but not the other two... maybe that's because I define the property explicitly, I'm not sure... Anyway, I also ran the MSI with debugging on, and in the log file, I see absolutely no reference at all to the MSXML6 or the TEST properties ever being set.
[WiX-users] Can I set the Directory name attribute with a custom property value?
Should this work? I am getting the literal strings as the directory name. Is the directory name attribute not formattable? Where is it documented what is formatted or not as I have not been able to find that information. Thanks, Dave Property Id=MYCOMPANYNAME Value=49thLatitude / Property Id=MYPRODUCTROOT Value=CmdMan / Directory Id=CompanyRoot Name=[MYCOMPANYNAME] Directory Id=CmdManRoot Name=[MYPRODUCTROOT] -- Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference ___ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users