Monday, June 23, 2008

Pushing Install Updates to Customers

Dear readers all of you who has been involved in authoring installation projects must know the pain of IT companies in maintaining their product at the customer end. When a product goes through a release cycle the most important aspect of the company is to market the product, the most sell able aspects of the great products in the market is their ease of deployment and keeping it updated.
Companies spend millions of $$ in maintaining in release cycle and some more millions to support it, so that they are ahead of their competitors in the market. Releasing fixes, providing updates in a timely manner is their top priority so that they can win the confidence of their customers and keep the market growing for then.
But you all must realize that it requires huge investments for the IT companies for creating a dedicated support network for their customers to keep them updated with the latest fixes. Imagine a software which can update itself without any manual intervention, a system where the Administrator need not worry about reading the documentation before installing the updated manually, a huge enterprise system without going down for a single second updates itself !!
I think you must not have got surprised from the above statements, you might have already seen this "Windows Updates", "Java Updates" and millions of similar updates notification that might have gone un noticed!
These features are a must have for installers and frankly speaking they are very easy to achieve, just a few clicks during installation and here you are. All your customers will be using your latest version of the software and you can end up saving thousands of $$ on support calls.
You can add this feature in your installation product by using FLEXnet Connect from Macrovision.
All you need to do is add an update manager in your installation product, then list updates that will be pushed to the customers and you are done.
Some of the key benefits of using the FLEXnet Connect are listed below

Cut Costs with Electronic Software Delivery
Cut support costs by keeping users on your most current version
Cut product fulfillment, upgrade delivery, and renewal costs
Increase customer satisfaction by proactively delivering updates
Improve Customer Communication with In-Product Messaging
Deliver marketing messages to customers and evaluators as they use your software
Target users based on their product version, location, entitlement status, and more
Reach all of your customers directly, even if they purchased through a reseller
Improve Marketing and Development with Customer Data
Better understand your user base with data on total customer size, versions in use, and upgrade patterns
Learn how customers value your software by seeing which features are most popular
Use real customer data to create better marketing campaigns and more competitive products

For more details over the product visit Macrovision site

5 comments:

Unknown said...

Hi Jen,
The issue is obvious; you .lax file is created much before your custom code is executed. If you wan to run you java application using a launch anywhere it can be achieved through Advanced designer. In the properties of the file inside $USER_INSTALL_DIR$ check "Add to class path". Once the property is set the behaviour of IA changes while creatign the .lax file.

Here is the sequence of execution in CASE1 (Files needs in CP are already present in target machine)

1. IA launcher in instantiated
2. Run your custom code below in the preinstall section before the user selects $USER_INSTALL_DIR$
3. Proceed with the installation; IA_CLASS_PATH will be updated accordingly

CASE 2 (The jar files will be installed as part of the installer)

1. Use the Advanced designer for adding files in the ClassPath (you will get rid of your custom code and its future maintainaence)
2. In the worst case you should edit the .lax file within installation using serrach replace string methoud either through custom code or Advanced designer. substitute the pattern IA.CLASS.PATH with IA.CLASS.PATH;$classPath$ (This came from your custom code)

Try usign these alternatives if they are not working; them please help me understand your exact scenario so that it can be worked in a better way


Thanks
Yogendra



On Fri, Aug 29, 2008 at 12:33 AM, Jen Duncan wrote:

Hi there,

I have come across your page a few times while googleing for my InstallAnywhere issue I am currently having. I was wondering if you knew of a solution to my problem I am having.

I am trying to generate my classpath using a custom code action. My java code basically looks inside one folder for all my .jar files and creates a string where every file is separated by a semicolon. Here's the code:

public void install( InstallerProxy ip ) throws InstallException
{
try{


String classPath = ip.substitute("$IA_CLASSPATH$");
File folder = new File("C:/Projects/projectCLASSPATH/Install/dist");
File[] listOfFiles = folder.listFiles();

for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
classPath +="dist/";
classPath+=listOfFiles[i].getName()+";";
}
}
ip.setVariable("$IA_CLASSPATH$",classPath);
}
}

I have created a custom code action in IA that calls the jar file created from the javacode above. If I write out the $IA_CLASSPATH$ in the console during installation, all my jars are there and look just fine, but the .lax file is not getting updated with the files. I have checked to be sure that in my launch anywhere properties, the lax.class.path is being set to $IA_CLASSPATH$, but the .lax file ends up only containing the following text, where should be 150 jars present in this file:
# LAX.CLASS.PATH
# --------------
# the Java classpath necessary to run this application
# Can be separated by colons (Mac OS/Unix) or semicolons (Windows)

lax.class.path=;lax.jar

Can you offer me any advice? Thanks in advance for anything you can offer me!

Jen Duncan

Unknown said...

Hey Jen,
Let me understand your problem,

As per my understanding, you have a installation project where some .jar file are mentioned as part of the project ($USER_INSTALL_DIR$) since these .jar file are build every time and are dynamic in nature (meaning some are there and some are not there every time). This means IA is throwing "Resource missing error when the project is build or opened in the designer"

"Is this what you intend to say" If this is the case open IA and follow these steps
1. Create a dummy project after clicking new project
2. Switch to Advanced Designer
3. Click on Edit -->Preferences menu
4. The third or Fourth option would be verify installation resources while loading
5. Disable the resource verification check there with the help of Radio Button.
6. Now open your project (it would not complain of missing resources)

One more question over here

String classPath = ip.substitute("$IA_CLASSPATH$"
);
File folder = new File("C:/Projects/projectCLASSPATH/Install/dist");
File[] listOfFiles = folder.listFiles();

From where are you getting this PATH in bold (C:/Projects/projectCLASSPATH/Install/dist) And why is this location a static one?

You are assuming that all your .jar files would be present in this location at all targeted computers and hence you are adding every file inside this directory to your classpath variable. Please help me understand this; is this just an example location or its a hardcoded static location to look for every time?

May be I have completely misunderstood your problem please forgive me for that.

If your case is different; please give me an overview of your installation project what it does and; how files and folders feed into it (speed folder or DIM). This will help me understand the exact issue.

P.S .LAX files are used internally by IA while loading, building or performing any actions. It contains information such as classpath, ANT path etc. If you are trying to have a third party functionality inside your installation logic copy all your .jar files inside $IA_CLASSPATH$ folder or manually edit the .lax file in $IA_HOME$ with entries of your .jar files.

-Yogendra



On Wed, Sep 3, 2008 at 6:41 PM, Jen Duncan wrote:

Yogendra,

Thank you so much for your reply. I thought I needed the .lax file created after the custom code ran, and tried adding the custom code just above the launch anywhere step, but I'm guessing that did not take care of my issue. I now have moved my custom code to the pre-installation portion of IA, in the step above where the user selects the installation folder. I also write out $IA_CLASSPATH$ to the console after my installation is completed, and now my classpath is empty. In your email you stated "If you wan to run you java application using a launch anywhere it can be achieved through Advanced designer. In the properties of the file inside $USER_INSTALL_DIR$ check "Add to class path". Once the property is set the behaviour of IA changes while creatign the .lax file." What file are you speaking of that I need to check "Add to class path" in the $USER_INSTALL_DIR$? I can't find any option for the launch anywhere .lax file in my advanced designer.

Our main problem is that with our software we are always building installations and our .jar files change so often. Every time we come in to IA, we are bombarded with error messages that "this .jar file is missing". The goal of my custom code is to be able to programmatically look at a certain folder and automatically add every file in that folder to the classpath without having to select the files in IA.

I hope you can help me! It seems like this should be a very simple thing to do! There's not much help out there on the web as far as IA goes, so I feel fortunate to come across your blog!

Thanks!
Jen

Karthikeyan J said...

Hi Yogendra,

i have a situation where i get a directory as input thro installer, and this directory has some jars.

These jars are required for my customcode to execute.

How to i do this.

I tried to set the IA_CLASSPATH before executing the custom code to refer to these jars.

But that did not work either.

Can you help me in this.

Regards,
Karthik.

Unknown said...

Hi Kartikayien,
As per my understanding you have a custom code that has external dependency which is discovered once the user inputs the paths for expected jar files.

To address the issue following are the steps

1. Add custom code action to your project
2. Once the required jar/zip is specified and the actual custom class specified in the details.
3. Add external jar dependency for running the custom action code
4. Say the user input path is stored in $USER_INPUT_PATH$, specify the external jar/dependency for the project as

$USER_INPUT_PATH$/jar/log4j.jar;$USER_INPUT_PATH$/jar/ant.jar

In order to make sure that your custom code is run, verify that custom code/dependency jar are complied and run using the same version of Java

Hope this solves the problem

Thanks
Avinash

karthik said...

Hi,
On which condition will installer enters maintainance mode in installanywhere. Can i know whether it check any registry or any variable.

Regards,
Karthik J