I've come across an interesting problem. When i install my application, from the run button in InstallAware or by double clicking the executable it runs fine. If double click the same executable at a later date, it goes through the prerequisites and asks me if i'd to uninstall, change, repair. If I choose uninstall it works great. If i install the same app/build using InstallAware or simply double clicking the EXE and then attemp to uninstall via control panel, it fails. First it goes through the prerequisites (expected) then it prompts me to change, remove, uninstall (expected) and then it asks me to "Please locate your original setup sources to continue operation" with a folder browser (unexpected). I browse to the location of the setup.exe and click ok. The dialog reverts back to the root directory tree. Not knowing what else to do, i click cancel. It gives me an error: Runtime error in setup script: Source File: <My main script> Line Number XXX Original setup sources required to complete operation, sources not found. The line which is cited is the close of the if Variable REMOVE Equals TRUE block. CLearly this block works just fine when run outside of the context of the control panel. I have to imagine the script itself is ok. Is there a setting somewhere that could be incorrect? Is there any way of working around the issue so that clients won't have to deal with it?
[DEFINE REGION: Perform Uninstallation]
if Variable REMOVE Equals TRUE
Comment: Uninstall product
Comment: TO-DO: Insert any additional uninstall commands here
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\WDMSTUB.sys to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmnusb.sys to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmnusb.inf to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmngen.sys to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn1200.sys to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn0200.sys to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn0200.inf to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn0200.sys to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn1200.sys to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmngen.sys to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmnusb.sys to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\WDMSTUB.sys to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmnusb.inf to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn0200.inf to $WINSYSDIR$
Get Component LowLevelDataAccess Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: LowLevelDataAccessUnInstallAutogen
end
Get Component MidLevelDataAccess Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: MidLevelDataAccessUnInstallAutogen
end
Get Component Blackthorn Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: BlackthornUnInstallAutogen
end
Get Component VirtualEarth Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: VirtualEarthUnInstallAutogen
end
Get Component KayakoInterface Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: KayakoInterfaceUnInstallAutogen
end
Get Component Utils Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: UtilsUnInstallAutogen
end
Get Component PluginPackager Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: PluginPackagerUnInstallAutogen
end
Get Component UpgradeTool Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: UpgradeToolUnInstallAutogen
end
Get Component InitBlackthornInstaller Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: InitBlackthornInstallerUnInstallAutogen
end
Get Component HelpFileIndexer Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: HelpFileIndexerUnInstallAutogen
end
Get Component LicensingTool Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: LicensingToolUnInstallAutogen
end
if Variable ARCHITECTURE Equals X86
DIFx Uninstall x86 driver in folder $ALLTEMPDIR$\grmnusb.inf
DIFx Uninstall x86 driver in folder $ALLTEMPDIR$\grmn0200.inf
end
if Variable ARCHITECTURE Equals AMD64
DIFx Uninstall x64 driver in folder $ALLTEMPDIR$\grmnusb.inf
DIFx Uninstall x64 driver in folder $ALLTEMPDIR$\grmn0200.inf
end
if Variable ARCHITECTURE Equals IA64
DIFx Uninstall ia64 driver in folder $ALLTEMPDIR$\grmnusb.inf
DIFx Uninstall ia64 driver in folder $ALLTEMPDIR$\grmn0200.inf
end
Apply Uninstall (get result into variable SUCCESS)
Set Variable PROGRESS to 100
else
<<Code Folding Region>>
Just by glancing at that code, I wonder why you have so many Install File comands before the Apply Uninstall command.
Also, your mention of going through the prerequisites is also confusing. Especially that they would display before a modify/change remove...
It sounds like your case is like this:
(without the setup installed)
Run setup.exe (we'll count this as 'running' the setup from IA, like build->Run, no?). Install app.
Run setup.exe. Choose Uninstall.
Result:
works as expected. App properly removed.
(without the setup installed)
Run setup.exe. Install app.
Uninstall app from Add/Remove Programs.
Result:
Dialog appears: "Please locate your original setup sources to continue operation"
Choosing the source location does not detect sources.
Is this a 64-bit application? Or running in 64-bit mode?
Can you provide screenshots of your registry after install?
The application was compiled for cross platform compatibility. I may need to switch to compiling for x86 only due to an unrelated issue. In any event, the installer detects the architecture and varies some of the install components based on architecture (.NET runtime, sqlserverce runtime, etc...).
Is the prereq screen not supposed to precede the uninstall/modify/repair screen? This was the default setup created by the graphical designer unless I managed to screw it up inadvertently.
I found two entries to my application in this subkey:
Please create a new project and choose basic setup. Examine its structure and compare it to yours. I have a feeling some things are mixed up (although you did state that it is installing properly)...
OK, so create a basic install and add a single file to be installed (to TARGETDIR).
The main thing to compare is the placement of the Install File(s) in relation to Apply Install and Apply Uninstall. (roughly lines 208 - 240 of the basic setup)
Well i created a new project with an install of 1 random file. Nothing in particular looked out of place with the exception of the install file lines which you noted earlier (near the uninstall section). I moved these down to the section immediately preceding apply install. This did not have any effect on the problem. Are there any other section i can look at?
Comment: Modify Target System
[DEFINE REGION: Perform Uninstallation]
if Variable REMOVE Equals TRUE
Comment: Uninstall product
Comment: TO-DO: Insert any additional uninstall commands here
Get Component LowLevelDataAccess Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: LowLevelDataAccessUnInstallAutogen
end
Get Component MidLevelDataAccess Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: MidLevelDataAccessUnInstallAutogen
end
Get Component Blackthorn Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: BlackthornUnInstallAutogen
end
Get Component VirtualEarth Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: VirtualEarthUnInstallAutogen
end
Get Component KayakoInterface Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: KayakoInterfaceUnInstallAutogen
end
Get Component Utils Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: UtilsUnInstallAutogen
end
Get Component PluginPackager Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: PluginPackagerUnInstallAutogen
end
Get Component UpgradeTool Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: UpgradeToolUnInstallAutogen
end
Get Component InitBlackthornInstaller Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: InitBlackthornInstallerUnInstallAutogen
end
Get Component HelpFileIndexer Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: HelpFileIndexerUnInstallAutogen
end
Get Component LicensingTool Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: LicensingToolUnInstallAutogen
end
if Variable ARCHITECTURE Equals X86
DIFx Uninstall x86 driver in folder $ALLTEMPDIR$\grmnusb.inf
DIFx Uninstall x86 driver in folder $ALLTEMPDIR$\grmn0200.inf
end
if Variable ARCHITECTURE Equals AMD64
DIFx Uninstall x64 driver in folder $ALLTEMPDIR$\grmnusb.inf
DIFx Uninstall x64 driver in folder $ALLTEMPDIR$\grmn0200.inf
end
if Variable ARCHITECTURE Equals IA64
DIFx Uninstall ia64 driver in folder $ALLTEMPDIR$\grmnusb.inf
DIFx Uninstall ia64 driver in folder $ALLTEMPDIR$\grmn0200.inf
end
Apply Uninstall (get result into variable SUCCESS)
Set Variable PROGRESS to 100
else
<<Code Folding Region>>
[DEFINE REGION: Perform First Time or Maintenance Installation]
Comment: Install/Re-Install product
Create Shortcut $SHORTCUTFOLDER$\Uninstall Blackthorn2 to $UNINSTALLLINK$
[OFFLINE CONTENT]
[DEFINE WEB MEDIA LowLevelDataAccess, Exclude from Build]
Get Component LowLevelDataAccess Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: LowLevelDataAccessInstallAutogen
end
[DEFINE WEB MEDIA MidLevelDataAccess, Exclude from Build]
Get Component MidLevelDataAccess Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: MidLevelDataAccessInstallAutogen
end
[DEFINE WEB MEDIA Blackthorn, Exclude from Build]
Get Component Blackthorn Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: BlackthornInstallAutogen
end
[DEFINE WEB MEDIA VirtualEarth, Exclude from Build]
Get Component VirtualEarth Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: VirtualEarthInstallAutogen
end
[DEFINE WEB MEDIA KayakoInterface, Exclude from Build]
Get Component KayakoInterface Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: KayakoInterfaceInstallAutogen
end
[DEFINE WEB MEDIA Utils, Exclude from Build]
Get Component Utils Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: UtilsInstallAutogen
end
[DEFINE WEB MEDIA PluginPackager, Exclude from Build]
Get Component PluginPackager Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: PluginPackagerInstallAutogen
end
[DEFINE WEB MEDIA UpgradeTool, Exclude from Build]
Get Component UpgradeTool Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: UpgradeToolInstallAutogen
end
[DEFINE WEB MEDIA InitBlackthornInstaller, Exclude from Build]
Get Component InitBlackthornInstaller Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: InitBlackthornInstallerInstallAutogen
end
[DEFINE WEB MEDIA HelpFileIndexer, Exclude from Build]
Get Component HelpFileIndexer Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: HelpFileIndexerInstallAutogen
end
[DEFINE WEB MEDIA LicensingTool, Exclude from Build]
Get Component LicensingTool Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: LicensingToolInstallAutogen
end
Comment: TO-DO: Insert any additional install commands here
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\WDMSTUB.sys to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmnusb.sys to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmnusb.inf to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmngen.sys to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn1200.sys to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn0200.sys to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn0200.inf to $ALLTEMPDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn0200.sys to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn1200.sys to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmngen.sys to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmnusb.sys to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\WDMSTUB.sys to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmnusb.inf to $WINSYSDIR$
Install Files C:\Users\Brian\Documents\BerlaCorp\installer-prereqs\Garmin USBDrivers_21\usb_drivers\grmn0200.inf to $WINSYSDIR$
[compiler if Variable BUILDMODE Equals PATCH]
Apply Patch (get result into variable SUCCESS)
[compiler else]
if Variable ADVERTISE Equals TRUE
Apply Advertised (get result into variable SUCCESS)
else
Include Script: Bt2Prereqs
Apply Install (get result into variable SUCCESS)
if Variable SUCCESS not Equals ERROR
if Variable SUCCESS not Equals CANCEL
if Variable ARCHITECTURE Equals X86
DIFx Install x86 driver in folder $ALLTEMPDIR$\grmn0200.inf
DIFx Install x86 driver in folder $ALLTEMPDIR$\grmnusb.inf
end
if Variable ARCHITECTURE Equals AMD64
DIFx Install x64 driver in folder $ALLTEMPDIR$\grmn0200.inf
DIFx Install x64 driver in folder $ALLTEMPDIR$\grmnusb.inf
end
if Variable ARCHITECTURE Equals IA64
DIFx Install ia64 driver in folder $ALLTEMPDIR$\grmn0200.inf
DIFx Install ia64 driver in folder $ALLTEMPDIR$\grmnusb.inf
end
end
end
if Variable SUCCESS not Equals ERROR
if Variable SUCCESS not Equals CANCEL
Get Component LowLevelDataAccess Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: LowLevelDataAccessPostInstallAutogen
end
Get Component MidLevelDataAccess Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: MidLevelDataAccessPostInstallAutogen
end
Get Component Blackthorn Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: BlackthornPostInstallAutogen
end
Get Component VirtualEarth Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: VirtualEarthPostInstallAutogen
end
Get Component KayakoInterface Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: KayakoInterfacePostInstallAutogen
end
Get Component Utils Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: UtilsPostInstallAutogen
end
Get Component PluginPackager Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: PluginPackagerPostInstallAutogen
end
Get Component UpgradeTool Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: UpgradeToolPostInstallAutogen
end
Get Component InitBlackthornInstaller Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: InitBlackthornInstallerPostInstallAutogen
end
Get Component HelpFileIndexer Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: HelpFileIndexerPostInstallAutogen
end
Get Component LicensingTool Selection State into Variable SELECTED
if Variable SELECTED Equals TRUE
Include Script: LicensingToolPostInstallAutogen
end
end
end
end
[compiler end]
Set Variable PROGRESS to 100
end
<<Code Folding Region>>
<<Code Folding Region>>
Also, i just realized that it does not matter if I am removing, modifying or repairing. When running the installer from the control panel it gets confused looking for the original source.
Here's another thing I just noticed: when I am prompted to locate the original source and fail to do this, the installer gives me an error message pointing me to line 344 of my main source file. Line 344 looks like this:
Apply Uninstall (get result into variable SUCCESS)
Set Variable PROGRESS to 100
else
<<Code Folding Region>>
//line 344!!!
[DEFINE REGION: Perform First Time or Maintenance Installation]
Comment: Install/Re-Install product
Create Shortcut $SHORTCUTFOLDER$\Uninstall Blackthorn2 to $UNINSTALLLINK$
[OFFLINE CONTENT]
[DEFINE WEB MEDIA LowLevelDataAccess, Exclude from Build]
This is starting to seem like it might be related to or at least affected by the strange bug I experienced earlier where the lines allegedly being executed are incongruous with what's actually happening. (In other words, if for example you add the line MessageBox Some Caption, Some Text and set a break point at that line, and debug, you will indeed see execution at that line, however as you step through the script you won't see the Message Box until 10 lines later at some unrelated command.)
I'll discuss this with development tomorrow to see if there's something we can do to find out what's happening.
I can't recall, did you originally create the script in an older version of IA, then upgrade? Or did the debugging-skip start to appear out of nowhere?
I have not updated my IA install. I grabbed the latest copy at the time and have not changed it since. (As far as i know there have been no new releases since then.) The debugging skip seems to have been happening since I started using the product. It took me a little while to realize it was happening (thought I was just not understanding the scripts...), but I think it was always there.
I'm not sure where to begin, honestly. I was recently troubleshooting a patch issue and for the life of me, could not recover the sample project that the customer sent us, but if I created a new project from scratch, copying and recreating everything from the supplied project, the one I created worked fine.
There shouldn't really be any difference between running the Uninstall from Add/Remove (it just calls the IA cached project) and the "original installer".
It might be helpful to know if you can uninstall it using this program I created to test (Un)Install MSI. Just feed it your project code GUID. Please upload the log if it fails.
I tried it once by entering the GUID with no braces and got a popup that said error. I tried again by entering the GUID with braces. The remove button was unresponsive. Nothing happened. No logs were produced.
Also, not sure if sent this along already but here are the registry keys that point to the uninstall. I checked, the path does exist (uninstall string as well as install path.) I get the "source not found" problem when uninstalling from this file. For some reason i get an error message this time, indicating that there is a problem with one of the lines in my script where i define a file bag which is used during the prerequisite section.
I can't really afford to do any more debugging at this time and I've had to rearrange my build process for unrelated reasons, so going forward my installer will be completely different. If i experience the same problem i'll try the uninstallmsi tool again.