Feb 23, 2012
09:54 PM
A little additional information I forgot to mention: The custom action that sets the value of DataFolder is also run in the Execute sequence "After CostInitialize". I have set the action to Execute only once. I have assumed that it would always execute only in the UI sequence if I was running in full UI mode and running it in Execute was only for silent mode operation. However, in a test application I'm getting similar results when I include it in the Execute sequence but no problems at all if I exclude it from that sequence. Completely baffled here.
... View more
Feb 23, 2012
09:25 PM
I am trying to allow the user to set the location for their data files using some modified clones of the DestinationFolder and InstallChangeFolder dialogs. I use these to allow the user to enter a path and to perform the path check. The "checked path" is stored in a public property. I have a folder that was created in the Files and Folders view that is called, say, DataFolder, and it has many subfolders. I have a "Set Directory" custom action that runs "After InstallWelcome" and sets the value of DataFolder to the value that the user specified via the dialogs. It works and all the data files go to the right place. Then I tried to uninstall the app and I get an Error 2707: Target paths not created. No path exists for entry DataFolder in Directory table. I have beat my head against the wall on this thing. Any thoughts on what I'm doing wrong, what I can do to fix it or is there just some better way to do this. Thanks!
... View more
Labels
- Labels:
-
InstallShield 2012
Feb 23, 2012
12:16 PM
This has to be a dumb, simple question but I haven't been able to find the answer. In a Basic MSI project is there a way to get the drive letter that the product is being installed on? I want to use this in a "Set Property" custom action. I thought there might be property that I could reference and it would return c: or d: or something like that. The Windows Installer ROOTDRIVE property seems to return 1:, which isn't what I was looking for. I presume I could read INSTALLDIR and then strip off everything after the : but I was hoping to not have to do it this way since it would require some InstallScript rather than just the predefined custom action. Anyone know of a simple way to just get the drive letter, like c or c: Thanks!
... View more
Labels
- Labels:
-
InstallShield 2012
Feb 08, 2012
11:12 AM
Hi enanrum, Thanks for the reply! I was able to find a way to do it with Custom Actions and, yes, it was tricky. This is a huge installer (9000+ files, 600 components, etc.). I had actually thought about your suggestion early on as a very good way to do it but it turns out that the number of files and components involved were just too many to make it practical. Here's what ended up working for me: - Create a folder named MyData in [CommonAppDataFolder] - Create the Config folder in MyData - Look at the directory table and get the identifier for the MyData folder(make it all uppercase if it isn't already) - Create a public property that has the same name as this directory identifier - Make sure that the value of this public property is null (delete the value) - Create a "Set Property" custom action that references the public property - In that custom action create a condition that is true when installing the 32 bit version of the product on 64 bit Windows (ISReleaseFlags><"32BitVersion" And VersionNT64) - When this condition is true set the value of the property to [CommonAppDataFolder]MyData (x86) - I ran this in both the UI Sequence and the Execute sequence and set it to "Execute only once". This worked but, as you said, it is tricky, undocumented and a PITA for something so simple as renaming a directory at run time. It's not that it's all that difficult once you figure out what to do, it's that, to my knowledge, it's not documented anywhere so you're left to just wonder and experiment until you stumble upon something that works. You'd think InstallShield would have a built in CA for something like this or at least document it clearly somewhere.
... View more
Feb 08, 2012
10:26 AM
Hi enanrum, Thanks for the reply. I agree with you completely. I have a small test installer that I use to try out different approaches and I inadvertently deleted an entry from its directory table once and, like you said, only found out about it after I built and ran it. Trying to straighten it out was a nightmare. That's why I posted here because I don't really want to risk that kind of outcome on the actual project. Given Installshield's propensity to create new directory entries at the drop of a hat and then never get rid of them, I'd think some sort of utility would be a necessary addition to the product. But it's looking like that doesn't exist.
... View more
Feb 07, 2012
05:55 PM
I have a very large Basic MSI installer that I've been working on for quite awhile. I've noticed that the directory table has gotten quite littered with unused entries over time - directories that I had created and later decided not to use, etc. I suspect there are other tables with similar clutter too. Is there a feature, function or utility that can be used to clean up the tables and get rid of entries that are not used anywhere? Thanks!
... View more
Labels
- Labels:
-
InstallShield 2012
Feb 01, 2012
08:47 PM
This should be simple and probably is. But I've spent all day with nothing but failure, hopefully someone can set me straight. I need to be able to install the same set of files to a different location depending on the OS that's running on the target machine and whether it's the 32 bit or 64 bit version of the app that's being installed. For example, if installing a 32 bit version of the app on 64 bit windows then the files need to be placed in [CommonAppDataFolder]MyData (x86)\Config. If installing the 64 bit version of the app on 64 bit windows then the files need to be placed in [CommonAppDataFolder]MyData\Config. The approach I've been pursuing is to create the MyData and Config folders under [CommonAppDataFolder] and then place all the installable files in these folders (they come from a huge number of components). Then I tried to use a "Set Directory" custom action to rename the MyData folder to MyData (x86) when I detected that I was installing the 32 bit version of the app on 64 bit Windows. This seemed straight forward but I've had no luck. I've gotten a combination of errors depending on when I scheduled the execution of the CA and absolutely nothing has worked. I'm executing the CA "only once" but have included it in both the UI sequence and the Exec sequence. I've sequenced it "after CostFinalize" in both cases. Further, I'm now at a point where I can't even uninstall it as I'm getting an "error 2343: Specified path is empty" message. Can anyone help me with understanding a simple way to perform this simple function - basically renaming a folder. Thanks!
... View more
Labels
- Labels:
-
InstallShield 2012
Nov 15, 2011
05:37 PM
Hi Skolte, I appreciate the help! I'm thinking that perhaps the 0 byte files will be the solution that best matches the requirements in this case. And I agree that a new build will need to be done each time changes are made to the build environment. We were just looking for a way to not have to actually modify the project itself, which both of those solutions seem to accomplish. If you want to experiment a little more with the behavior, the situation I set up was to create a folder with two 0 byte .txt files in it, say one.txt and two.txt. I also placed an empty sub folder in it. Then I created a component that dynamically linked to the top folder and specified in the dynamic link dialog box to include *.*. That worked fine and, on the target machine, I got both one.txt and two.txt and the empty folder (as I had expected). Then I went back to the dynamic link dialog box and, in the "exclude files with this pattern" area, I entered one.txt . What I then got on the target machine was the file two.txt but the empty folder wasn't created. What I had expected was to see two.txt and the empty folder since the exclusion was only for one.txt. Thanks again - you've been very helpful on a couple of issues I've had.
... View more
Nov 15, 2011
10:36 AM
Hi Skolte, Thanks for the reply! I might not have explained the problem very well. The behavior that the client wants is to dynamically link to a folder and (dynamically) "include all subfolders". They want empty as well as non empty folders that exist in the "tree" to be created on the target machine. Over time, they want to be able to add additional folders into this tree - some empty, some not - and have all added folders (empty and not empty) be created on the target machine. So I could go in right now and explicitly create the empty folders that they currently have, as you suggested (though this goes against their wish to have all subfolders created dynamically). This would solve the problem for right now. But, if they add some new empty folders into the tree in the future, they'd have to modify the project to explicitly create them every time they did that rather than just do a rebuild. The behavior that I described in the original post just seems wrong to me. So if you have any additional thoughts I'd appreciate hearing them. Thanks again for taking the time and effort to respond - I appreciate it!
... View more
Nov 12, 2011
11:59 AM
I ran into a behavior in IS today that looks like a bug but I'm not sure. I'm using a Basic MSI project type and I don't have SP1. Here's what I found: I have a component that has a dynamic link to a folder and I'm specifying to include *.* and exclude a specific file. The folder also contains another folder and that folder is empty. When I look on the Files and Folders view, the empty folder shows up as I would expect. However, when I do the install, the empty folder is not created on the destination machine. This might or might not be acceptable, but ... What I found is that if I change the configuration of the dynamic link such that it does not exclude any files ("Exclude files with the following patterns:" is left blank), then the empty folder is created on the destination machine. This doesn't seem right to me but am I missing something? I want the empty folder to be created on the destination machine and I also want to exclude a file. If the above behavior is correct, is there a way to achieve what I want? Thanks!
... View more
Labels
- Labels:
-
InstallShield 2012
Nov 09, 2011
03:41 PM
Hi Cary, Thanks again for the help! If I'm understanding correctly, you have just solved my problem! Education is a powerful thing. I'm brand new to IS and, as you stated, wasn't aware of how the sequencing is handled. So let me repeat what I heard and make sure I got it. It sounds like all of the files for every installed component will be copied to the target machine in one operation. At some time after that, all of the search and replace actions will take place. If that's the case then, yes, I should be able to choose almost any component, associate all of the Replacement Sets with it and be confident that none of those search and replace actions will not run until after all files from all components have been moved to the target machine. Is that correct? If so, problem solved! Is there any guarantee of the order the search and replace operations themselves are executed in. For example if there are three of these operations targeted at a particular file, are they executed in the order they show up in the explorer? I was assuming (and you know what that means) that all operations associated with a component would be handled when that component was installed rather than having all like operations for the entire set of components grouped together. As one last question, could you point me to the documentation on the sequence numbering and descriptions. It sounds like something I definitely need to understand better. Thanks again very much - I really appreciate your help.
... View more
Nov 08, 2011
07:21 PM
Hi, Thanks for the reply! I don't think the technique you referred to will work for my current issue but it is definitely a good one to know. The situation I have is a bit complicated to explain. We are in the process of updating an InstallScript project (IS 7.1) to IS 2012/ Basic MSI. The project supports about 15 different languages. Each language contains a couple of .ini files that have specific information for that language. The .ini files are all named the same and, at run time, are written to a couple of different directories. So far, so good. For example, if English is specified, the English files are written to 2 different folders. If Spanish was being built then the Spanish files (of the same name but different contents) would be written to the same two folders. The problem is that the .ini files contain some symbolic information that needs to be replaced with values determined at runtime. The current approach we are taking is to use the Text File Changes feature to do a search and replace. This works well generally. The easiest way to make this replacement would be to wait until all the components that may write files to these directories have installed and then do the search and replace on whatever files are written to the two directories. Since the "Replacement Sets" need to be associated with a specific component, it would be very convenient if I could create one Replacement Set with all the appropriate Replacements, and then associate that Replacement Set with a component that I know will install after all the other components that write files to the two folders. If I can't do this, I will need to create a Replacement Set and Replacements for each and every component that writes the multiple .ini files to the directories, and it turns out to be a large number - so laziness is driving my question! Perhaps there's a better way to do this? Thanks for any help you can provide. I doubt that my explaination is very clear so if you need more information please post back.
... View more
Nov 08, 2011
06:39 PM
Is there a way to control the order that features and/or components are installed? I'd like to be able to have a component that installs only after several other specific components have installed but I can't seem to find a way to do that. Any help would be appreciated.
... View more
Labels
- Labels:
-
InstallShield 2012
Nov 08, 2011
05:42 PM
Is there a way to put up a dialog prior to the prerequisites being installed?
... View more
Labels
- Labels:
-
InstallShield 2012
Nov 06, 2011
12:13 PM
Hi SK, Thanks for the good advice. I have finally figured out what is going on. The project that we converted from IS7 has about 70 features. Many of them are configured to be non-visible. It turns out that the Display value (in the Feature table) for an invisible feature is 0 whereas the values for visible features are all greater than zero. When the list of features are displayed in either the Features view or the Setup Design view, the invisible features show up at the top of the list (value of 0). I guess this is reasonable though it seems to differ from older behavior. The problem is that if you are in either the Feature or Setup Design view and use Up to move a visible feature up the feature list, you can move it right up into the invisible group. Again, maybe that's OK. However, if you switch to the other view, the feature will only have moved up to the bottom of the invisible features. So when you look at the order of the features in this case, it's different - the visible feature you moved up to, say, the top of the invisible featues in the Setup Design view will show up at the bottom of the invisible features in the Feature view. I don't think this behavior is intuitive or what anyone would expect. Once you know how it works you can deal with it but it sure threw me for a loop for quite awhile. Thanks again for all your help!
... View more
Latest posts by gcggcg
Subject | Views | Posted |
---|---|---|
850 | Feb 23, 2012 09:54 PM | |
1877 | Feb 23, 2012 09:25 PM | |
1364 | Feb 23, 2012 12:16 PM | |
1690 | Feb 08, 2012 11:12 AM | |
846 | Feb 08, 2012 10:26 AM | |
2126 | Feb 07, 2012 05:55 PM | |
3062 | Feb 01, 2012 08:47 PM | |
1101 | Nov 15, 2011 05:37 PM | |
1101 | Nov 15, 2011 10:36 AM | |
3017 | Nov 12, 2011 11:59 AM |
Activity Feed
- Posted Re: Error 2707 on Uninstall on InstallShield Forum. Feb 23, 2012 09:54 PM
- Posted Error 2707 on Uninstall on InstallShield Forum. Feb 23, 2012 09:25 PM
- Posted Installation drive on InstallShield Forum. Feb 23, 2012 12:16 PM
- Posted Re: Rename a Folder on InstallShield Forum. Feb 08, 2012 11:12 AM
- Posted Re: Cleaning Up the Tables on InstallShield Forum. Feb 08, 2012 10:26 AM
- Posted Cleaning Up the Tables on InstallShield Forum. Feb 07, 2012 05:55 PM
- Posted Rename a Folder on InstallShield Forum. Feb 01, 2012 08:47 PM
- Posted Re: Bug or Feature on InstallShield Forum. Nov 15, 2011 05:37 PM
- Posted Re: Bug or Feature on InstallShield Forum. Nov 15, 2011 10:36 AM
- Posted Bug or Feature on InstallShield Forum. Nov 12, 2011 11:59 AM
- Posted Re: Order of Feature/Component Installation on InstallShield Forum. Nov 09, 2011 03:41 PM
- Posted Re: Order of Feature/Component Installation on InstallShield Forum. Nov 08, 2011 07:21 PM
- Posted Order of Feature/Component Installation on InstallShield Forum. Nov 08, 2011 06:39 PM
- Posted Dialog Before Prerequisites on InstallShield Forum. Nov 08, 2011 05:42 PM
- Posted Re: Feature Order on InstallShield Forum. Nov 06, 2011 12:13 PM
- Posted Re: Feature Order on InstallShield Forum. Nov 03, 2011 03:53 PM
- Posted Re: Feature Order on InstallShield Forum. Nov 03, 2011 12:01 PM
- Posted Feature Order on InstallShield Forum. Oct 31, 2011 04:12 PM
- Posted Re: Excluding Language Specific Components on InstallShield Forum. Oct 20, 2011 05:01 PM
- Posted Excluding Language Specific Components on InstallShield Forum. Oct 19, 2011 07:17 PM