Custom Action Help please?
Hoping someone out there might be able to help me out...
I have a vendor supplied msi (RightNow 8 Service module) that uses ca's to establish a DBNAME and CGIURL variable. Everything works great...until I need to change those 2 values. I know that running an uninstall and reinstalling the app will rewrite those values, but I need to make those values change post initial installation to support a db and url name change in a few days. How might I accomplish this? I've never encountered a package that wrote public properties this way; what is the benefit?
Any pointers are greatlyi appreciated! [:)]
I have a vendor supplied msi (RightNow 8 Service module) that uses ca's to establish a DBNAME and CGIURL variable. Everything works great...until I need to change those 2 values. I know that running an uninstall and reinstalling the app will rewrite those values, but I need to make those values change post initial installation to support a db and url name change in a few days. How might I accomplish this? I've never encountered a package that wrote public properties this way; what is the benefit?
Any pointers are greatlyi appreciated! [:)]
0 Comments
[ + ] Show comments
Answers (30)
Please log in to answer
Posted by:
kiptek
15 years ago
Posted by:
nomead
15 years ago
Thanks for the quick reply.
Set Property CGIURL to [CGIURL] [CustomTextA_SetProperty_EDIT1].
Set Property DBNAME to [DBNAME] [CustomTextA_SetProperty_EDIT2]
both found in UI with no conditional requirements in the MSI Script.
I don't know how to delete the values; CGIURL is displayed in the login popup, but DBNAME isn't present. This is a .net application, which I've also never worked with before... Regmon and Filemon don't report any instances of the CGIURL value when I search.
Set Property CGIURL to [CGIURL] [CustomTextA_SetProperty_EDIT1].
Set Property DBNAME to [DBNAME] [CustomTextA_SetProperty_EDIT2]
both found in UI with no conditional requirements in the MSI Script.
I don't know how to delete the values; CGIURL is displayed in the login popup, but DBNAME isn't present. This is a .net application, which I've also never worked with before... Regmon and Filemon don't report any instances of the CGIURL value when I search.
Posted by:
kiptek
15 years ago
Posted by:
nomead
15 years ago
Posted by:
nomead
15 years ago
Sorry, I have no idea where these values are being stored...I can only guess that they are being embedded/compiled in a file... There are hits in the msi log file, in a line "MSI (s) (B0:60) [14:12:32:734]: Executing op: CustomActionSchedule(Action=_57AF76F5_8A8D_4A4A_9B37_35EC84CF9401.install,ActionType=3073,Source=BinaryData,Target=ManagedInstall,CustomActionData=/installtype=notransaction /action=install..."
Posted by:
kiptek
15 years ago
Posted by:
nomead
15 years ago
Posted by:
kiptek
15 years ago
Posted by:
reds4eva
15 years ago
Rightnow is a pile of poo. At least they have changed the latest version to an MSI, and not a clickonce app.
Another gotcha for version 8.4.2 is that it requires ISA server v2006. So I had to also upgrade the ISA server.
If like me you have to have some site specific stuff in MSI's, create a transform, Create those 2 properties, cgiurl, and dbname, populated with the appropriate info. They dont write those values to somewhere you can easily edit them later.
You could also just use the command line -
msiexec /i RightNow.Installer.Setup.msi CGIURL=http://xxx-x.custhelp.com/cgi-bin/xxx.cfg DBNAME=xxxx /quiet /passive NOPING=true
Another gotcha for version 8.4.2 is that it requires ISA server v2006. So I had to also upgrade the ISA server.
If like me you have to have some site specific stuff in MSI's, create a transform, Create those 2 properties, cgiurl, and dbname, populated with the appropriate info. They dont write those values to somewhere you can easily edit them later.
You could also just use the command line -
msiexec /i RightNow.Installer.Setup.msi CGIURL=http://xxx-x.custhelp.com/cgi-bin/xxx.cfg DBNAME=xxxx /quiet /passive NOPING=true
Posted by:
reds4eva
15 years ago
Posted by:
nomead
15 years ago
@kiptek - they don't have a trial version. Would it be unethical to send the client? the app is pretty useless without a service contract with RightNow, since you won't have a backend for a connection, and I don't have credentials.
@reds4eva - you hit the nail on the head. It is still vendor preferred as a click-once app, which really stinks like poo sine they install to the local user's profile, and we have non-roaming, volatile user profiles.
I tried publishing the 2 properties in the properties table, but when I run a reinstall, it doesn't rewrite the values. I know they have a exe to publish additional site info, but it won't remove existing site info, and I have told that isn't acceptable. Any other ideas?
Thanks again, and I would appreciate it if anytone has insight into why a packager would package an app like this?
@reds4eva - you hit the nail on the head. It is still vendor preferred as a click-once app, which really stinks like poo sine they install to the local user's profile, and we have non-roaming, volatile user profiles.
I tried publishing the 2 properties in the properties table, but when I run a reinstall, it doesn't rewrite the values. I know they have a exe to publish additional site info, but it won't remove existing site info, and I have told that isn't acceptable. Any other ideas?
Thanks again, and I would appreciate it if anytone has insight into why a packager would package an app like this?
Posted by:
nomead
15 years ago
Posted by:
reds4eva
15 years ago
ORIGINAL: nomead
@reds4eva - you hit the nail on the head. It is still vendor preferred as a click-once app, which really stinks like poo sine they install to the local user's profile, and we have non-roaming, volatile user profiles.
The latest version I got was an MSI. But it maybe that they created it just for my client, maybe. What version do you have ?
before I had the msi I had to use the clickonce installer, I just created my own msi that copied files and set the dbname and cgiurl. When the user first logged in it would connect to rightnow and download the rest of the client files, to the profile like you said, like a wrapper. It was ugly.
A repair wont re-write the properties, you'll have to remove and re-install.
That site tool is for creating new sites, which is not alot of use.
Posted by:
reds4eva
15 years ago
ORIGINAL: nomead
Thanks again, and I would appreciate it if anytone has insight into why a packager would package an app like this?
heres some links.
Basically, clickonce is great for a home user, but not so flash for a corporate environment. Not sure how they expect their product to be deployed to 1000 users, an email ?
http://msdn.microsoft.com/en-us/library/ms973805.aspx#clickoncevsinstaller_topic8
http://msdn.microsoft.com/en-us/library/71baz9ah(VS.80).aspx
http://msdn.microsoft.com/en-us/library/142dbbz4(VS.80).aspx
Posted by:
anonymous_9363
15 years ago
Posted by:
Inabus
15 years ago
Not sure if anyone has suggested this but you could remove both custom actions from the custom action table, via a transform of course!
Once that is done manually set the 2 properties in the property table and then see if this works and deploys correctly. Also the problem with them atm is that they wont work when doing /qb or /qn as they are only in the UI sequance, from what you said.
P
Once that is done manually set the 2 properties in the property table and then see if this works and deploys correctly. Also the problem with them atm is that they wont work when doing /qb or /qn as they are only in the UI sequance, from what you said.
P
Posted by:
nheim
15 years ago
Posted by:
nomead
15 years ago
Thanks for all the replies.
It seems this installer copies some database files during installation, and relies on those ca based properties to determine where to get those files. I imagine that is why they plugged it in as a CA property, but I still don't understand how it can be used without declaring in the property table. I need to test removing the ca and using property values, as I am a bit concerned how they are manipulating xml files and its' links to those database files.
I've been in conversation with the business unit requesting the app, and the vendor...we may just go with the 1 site for a live cut, and manually remediate testers using the install/uninstall/reinstall method. Definitely less than ideal, but time is of the essence. I would still like to understand what this package is doing.
I am working on recompiling without files, problem is my vm's are all on other projects at the moment. I will send out the package as soon as one frees up.
It seems this installer copies some database files during installation, and relies on those ca based properties to determine where to get those files. I imagine that is why they plugged it in as a CA property, but I still don't understand how it can be used without declaring in the property table. I need to test removing the ca and using property values, as I am a bit concerned how they are manipulating xml files and its' links to those database files.
I've been in conversation with the business unit requesting the app, and the vendor...we may just go with the 1 site for a live cut, and manually remediate testers using the install/uninstall/reinstall method. Definitely less than ideal, but time is of the essence. I would still like to understand what this package is doing.
I am working on recompiling without files, problem is my vm's are all on other projects at the moment. I will send out the package as soon as one frees up.
Posted by:
nomead
15 years ago
Posted by:
AngelD
15 years ago
ORIGINAL: nomead
Of particular interest are the ca's "Call DLL from Installation Function ManagedInstall..."
How might one determine what the procedure calls invoke?
You should be able to see what the .NET DLL does by using reflector: http://www.red-gate.com/products/reflector/
Posted by:
Inabus
15 years ago
Having looked at the MSI it appears that the DBNAME and CGIURL properties are populated when a user reaches the "URL and Database Name" dialog (CustomTextA). Once populated the 2 properties are used by 2 custom actions as follows:
[CGIURL]
_57AF76F5_8A8D_4A4A_9B37_35EC84CF9401.install.SetProperty
CustomTextA_SetProperty_EDIT1
[DBNAME]
_57AF76F5_8A8D_4A4A_9B37_35EC84CF9401.install.SetProperty
CustomTextA_SetProperty_EDIT2
Looking at this it should jsut be possible to do the following:
MSIEXEC /i "RightNow.Installer.Setup.msi" DBNAME="<VALUE>" CGIURL="<VALUE>" /qb
Or you could go into the Property table and create the 2 properties with the values you want, these will of course get overwritten by running in UI mode and populating the URL screen.
Remember that these properties dont have to be in the property table as they can be dynamically created and destroyed as the MSI installs.
Paul
[CGIURL]
_57AF76F5_8A8D_4A4A_9B37_35EC84CF9401.install.SetProperty
CustomTextA_SetProperty_EDIT1
[DBNAME]
_57AF76F5_8A8D_4A4A_9B37_35EC84CF9401.install.SetProperty
CustomTextA_SetProperty_EDIT2
Looking at this it should jsut be possible to do the following:
MSIEXEC /i "RightNow.Installer.Setup.msi" DBNAME="<VALUE>" CGIURL="<VALUE>" /qb
Or you could go into the Property table and create the 2 properties with the values you want, these will of course get overwritten by running in UI mode and populating the URL screen.
Remember that these properties dont have to be in the property table as they can be dynamically created and destroyed as the MSI installs.
Paul
Posted by:
nomead
15 years ago
@Angel - Thanks for the link. How can I determine which dll is being called based on those ca's?
@Inabus - Yes, the problem I was having was that the values were not being repopulated during a reinstall. I needed those values to change via reinstall with a command line property declaration, but (as I undersand) they were a CA in the UI, it wouldn't rewrite the value during a reinstall. Would deleting those CA's and writing a global variable for CGIURL and DBNAME allow those ca's using the properties to invoke and complete? In otherwords, is there a logical reason the vendor made those property declarations as a ca and not as a property table value?
Thanks for taking the time to look at the MSI!
@Inabus - Yes, the problem I was having was that the values were not being repopulated during a reinstall. I needed those values to change via reinstall with a command line property declaration, but (as I undersand) they were a CA in the UI, it wouldn't rewrite the value during a reinstall. Would deleting those CA's and writing a global variable for CGIURL and DBNAME allow those ca's using the properties to invoke and complete? In otherwords, is there a logical reason the vendor made those property declarations as a ca and not as a property table value?
Thanks for taking the time to look at the MSI!
Posted by:
AngelD
15 years ago
Posted by:
kiptek
15 years ago
Posted by:
Inabus
15 years ago
Well I suspect the properties ARE being set correctly by the 2 custom actions:
CustomTextA_SetProperty_EDIT1
CustomTextA_SetProperty_EDIT2
Looking at HOW those custom actions are used by the installer is where I suspect the repair / reinstall is falling down, it appears there are 2x conditions on the 2 custom actions that actually use those properties, namely:
_57AF76F5_8A8D_4A4A_9B37_35EC84CF9401.install.SetProperty
The above custom action has a condition of $C__91106C9ECBA2BF3C58D4DFD7B69703F0>2
_57AF76F5_8A8D_4A4A_9B37_35EC84CF9401.install.SetProperty
The above custom aciton has a conditon of $C__91106C9ECBA2BF3C58D4DFD7B69703F0>2
What you could try, as a test, is remove the conditions on the 2 custom actions, to see if this resolves the problems.
BTW what do you mean by "Re-install", an uninstall then install, or a repair?
The reason is that the property in question is set and destroyed dynamically so wou ld have to be set whenever you do anything, like REINSTALL="ALL" etc you would need to pass the property again on the command line.
P
CustomTextA_SetProperty_EDIT1
CustomTextA_SetProperty_EDIT2
Looking at HOW those custom actions are used by the installer is where I suspect the repair / reinstall is falling down, it appears there are 2x conditions on the 2 custom actions that actually use those properties, namely:
_57AF76F5_8A8D_4A4A_9B37_35EC84CF9401.install.SetProperty
The above custom action has a condition of $C__91106C9ECBA2BF3C58D4DFD7B69703F0>2
_57AF76F5_8A8D_4A4A_9B37_35EC84CF9401.install.SetProperty
The above custom aciton has a conditon of $C__91106C9ECBA2BF3C58D4DFD7B69703F0>2
What you could try, as a test, is remove the conditions on the 2 custom actions, to see if this resolves the problems.
BTW what do you mean by "Re-install", an uninstall then install, or a repair?
The reason is that the property in question is set and destroyed dynamically so wou ld have to be set whenever you do anything, like REINSTALL="ALL" etc you would need to pass the property again on the command line.
P
Posted by:
nomead
15 years ago
@Inabus - By reinstall--you are correct--uninstall then install.
@Kiptek - I've done so; Although just setting the property (and passing the value via the command line or setting the value in the property table) does not set the value after installation, removing the ca in the transform and declaring the property does.
What I don't know, is if that is causing the issue. It seems somewhere in the package ( I am guessing in those .net assemblies), complete folders are copied from the CGIURL and DBNAME values to the local PC. When the ca's for DBNAME and CGIURL are removed, the folders and files are not copied. Would that be the valid reason to have them declared and used within a ca and not the property table?
@Kiptek - I've done so; Although just setting the property (and passing the value via the command line or setting the value in the property table) does not set the value after installation, removing the ca in the transform and declaring the property does.
What I don't know, is if that is causing the issue. It seems somewhere in the package ( I am guessing in those .net assemblies), complete folders are copied from the CGIURL and DBNAME values to the local PC. When the ca's for DBNAME and CGIURL are removed, the folders and files are not copied. Would that be the valid reason to have them declared and used within a ca and not the property table?
Posted by:
anonymous_9363
15 years ago
ORIGINAL: nomeadI wouldn't have thought so, because that's happening in the installation and it sounds like your problem is occuring when the application itself is executing. Why not ProcMon the app as it executes? It'll show you immediately what's missing (look for 'NAME NOT FOUND' entries) or if the resource is permission-protected somehow ('ACCESS DENIED').
It seems somewhere in the package ( I am guessing in those .net assemblies), complete folders are copied from the CGIURL and DBNAME values to the local PC. When the ca's for DBNAME and CGIURL are removed, the folders and files are not copied. Would that be the valid reason to have them declared and used within a ca and not the property table?
Posted by:
fritoz
15 years ago
I appreciate I may be a bit late with this info but it may help others. I'm working on RightNow Smart Client at the moment and I was supplied this command line for populating additional URL and DBNAMES.
<InstallDir>RightNow.SiteInstaller.exe /quiet /passive /i CGIURL=http://your.web.page.url DBNAME=your_dbname
For my install the site installer exe is located here (by default): C:\Program Files\RightNow Technologies\RightNow Smart Client\8.3.5
My current MSI has two public properties named CGIURL and DBNAME which I set to our estate's first entries. I also added two Custom Actions to populate our other two entries. The only problem here was that the above exe also spawns the PDFPrinter installer afterwards which was giving errors. It appears that I may have to insert an additional two CAs, one prior to and then one inbetween those CGIURL/DBNAME CAs to uninstall the PDFPrinter. The command to uninstall the printer is:
"C:\Program Files\InstallShield Installation Information\RightNow Technologies PDF Driver\Pdf.Install.exe" /u
Horriblly authored MSI imho [:'(]
<InstallDir>RightNow.SiteInstaller.exe /quiet /passive /i CGIURL=http://your.web.page.url DBNAME=your_dbname
For my install the site installer exe is located here (by default): C:\Program Files\RightNow Technologies\RightNow Smart Client\8.3.5
My current MSI has two public properties named CGIURL and DBNAME which I set to our estate's first entries. I also added two Custom Actions to populate our other two entries. The only problem here was that the above exe also spawns the PDFPrinter installer afterwards which was giving errors. It appears that I may have to insert an additional two CAs, one prior to and then one inbetween those CGIURL/DBNAME CAs to uninstall the PDFPrinter. The command to uninstall the printer is:
"C:\Program Files\InstallShield Installation Information\RightNow Technologies PDF Driver\Pdf.Install.exe" /u
Horriblly authored MSI imho [:'(]
Rating comments in this legacy AppDeploy message board thread won't reorder them,
so that the conversation will remain readable.
so that the conversation will remain readable.