|
I am creating a msi installer for a command line program I have
written in c#.
I would like the user to be able to just type the program name from
anywhere on the file system, and have the program run.
Basically, I need to alter the PATH environment variable to include
the installation directory. I have spent some time looking for
solutions, and I haven't been able to find any thing definitive.
Options I have found include:
-Editing the registry from the installer: requires reboot, and deletes
entire path variable on uninstall.
-calling a Custom Action DLL to edit the path. DLL must be written in
c++ (is that correct?). Can't uninstall?
-write a vbs script to be run by the installer and set the path. (I
don't know VBS script)
-provide instructions to the user to tell them how to edit their path
: not very user friendly.
However, none of these seem like good options. I understand some of
the reasons why setting an environment variable is not really a good
idea, but surely this is something that needs to be done quite often.
So, any suggestions or ideas?
mike c
|
|
|
|
|
The Windows Installer Environment table has a good solution for setting environment variables, but unfortunately the Visual Studio deployments projects don't give you a way to author entries in the appropriate table. You'll have to use some other tool to author that part of your setup.
If you've got money to spend, there are several more sophisticated setup packages that give you a GUI authoring tool and access to this.
I've also done things like this by using the Orca tool (part of the Windows Installer SDK portion of the Platform SDK) to create a merge module (.MSM file) which I include into a setup otherwise authored in Visual Studio's deployment project tool. This will take you more learning & effort, but it's a free download
Burt Harris
|
|
|
|
|
Thanks for the tip.
So, I would basically create some seperate code (in c#?) which would manipulate the environment variables using the Environment Table.
Basically, I want to add my application install directory to the path during installation, and remove it if the app is uninstalled.
Btw, I jsut download and installed the SDK you mention above, but I cant seem to find the orca tool you referenced.
thanks for the leads...
mike c
|
|
|
|
|
mikechambers wrote:
So, I would basically create some seperate code (in c#?) which would manipulate the environment variables using the Environment Table.
The easiest way would be to use Orca to add the environment variables to the Environment table of your Windows Installer database after you create it with the VS .NET deployment thing.
mikechambers wrote:
Btw, I jsut download and installed the SDK you mention above, but I cant seem to find the orca tool you referenced.
Are you sure you installed the Windows Installer section of the Platform SDK? Because I have it on my computer in the Program Files\Orca9x directory (for you it would be Program Files\OrcaNT, I believe). Note that it is not in the Microsoft SDK\bin directory, but the installer for it is there.
"Blessed are the peacemakers, for they shall be called sons of God." - Jesus
"You must be the change you wish to see in the world." - Mahatma Gandhi
|
|
|
|
|
thanks. It is not there, so perhaps I installed the wrong sdk.
I realized that I can have the installer launch an executable or call a dll (written in c#?).
So, i might just put the code I need in there.
mike c
|
|
|
|
|
Mike,
I'd recommend that you don't modify the PATH variable at all - the path has a limited size and a lot of installers edit the PATH unnecessarily. Instead, setup a registry subkey under the App Paths key:
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths]
Easy to delete at uninstall time too.
You set the key name to your .exe name (no path) and set the default unnamed value to the full path to the .exe; optionally you can also set a Path value containing the extra directories needed by that executable (really useful for multiple applications that refer to common libraries).
Beware though that if your executable name is something obvious that may have been used by someone else (e.g. "msdev.exe") you may end up overwriting the existing key.
BTW, I'd also recommend that if you do install shared libraries somewhere then store that path in the registry (under HKLM) to allow other installers to find them, rather than hardcoding installation folders.
Regards,
John Bates.
|
|
|
|
|
thanks for the suggestion on app path. I had looked into that, but unfortunately, the app path is not search when commands are run from the command line. only from the run window.
mike c
|
|
|
|
|
What's necessary to get a screen capture from a program that uses video overlaying (Windows Media player for one). Several programs such as SnagIT advertise being able to capture from these programs. Is there anything special in code that I need to use besides a standard bitblt?
|
|
|
|
|
i have searched and searched, does any one have any example of sending an outlook meeting request w/o having to log into mapi? i do not want to manage the outlook appointments but rather when my application creates a task i want to send a meeting request to the user w/o have to maintain that or create entries from a local user profile. if there was a way to send it through a special formatted smtp message that would be great. any help is much appreciated!
|
|
|
|
|
I'm looking for a way to write an object on a file. In Java I use ObjectOutputStream with a FileOutputStream.
There's in C# something similar?
Marco
|
|
|
|
|
Hava a look at the BinaryFormatter class
<a TITLE="See my user info" href=http:
|
|
|
|
|
fantastic I'll try following the example of the guide:
string fileName = Path.GetTempFileName();
FileInfo fileInfo = new FileInfo(fileName);
// Write the current time to the file in binary form.
DateTime currentTime = DateTime.Now;
FileStream fileWriteStream = fileInfo.OpenWrite();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(fileWriteStream, currentTime);
fileWriteStream.Close();
// Read the time back from the file.
FileStream fileReadStream = fileInfo.OpenRead();
DateTime timeRead = (DateTime)binaryFormatter.Deserialize(fileReadStream);
fileReadStream.Close();
Console.WriteLine("Value written {0}", currentTime);
Console.WriteLine("Value read {0}", timeRead);
Marco
|
|
|
|
|
Hi,
I am trapped in my graduation project and realy have to deliver it after 3 days so plz help.
I finished my Project, it is a desktop application programmed in C#, but i want to create a cool looking graphical user interface. something like "Realone player" or whatever look with cool buttons, nonrectangular form shapes and animations, so if there are any useful tips, GUI resources web pages that can help will be great.
Also i am looking for a working outlook bar, i got those in the utility library and lumisoft but they don't work as expected (not if compared with the one in Xceed Smart UI for .net)but unluckly i couldn't purshace it. where i can find one.
THANX SkywAlker
|
|
|
|
|
|
hello,
here is a little problem that i am facing at now.
how can i retrieve the values in an html table (on a web pages form) and i can then insert it into some database.
i.e. have to retrieve values from the page (html table) and then have to insert them to database table.
i am using c# and asp.net and database is sql server.
please guide me on this.
LOOKING FOR SOME HELP
ASIM NAZIR
Asim
|
|
|
|
|
i am currently doing comparison on the performance of DES and RSA. i had oledi finished the code on DES. however, i cannot find any information on RSA.
i was wondering whether u have any sample code/information on RSA file encryption? would u share it with me?
thank you very much.
regards
yccheok
|
|
|
|
|
|
Hi,
I have a problem with passing parameters to a method in a COM , i had imported to my C# application using the IDE add reference. This is because the parameter has type as "out object", when i tried passing an Object (reference) to this, the error is "invalid arguments". Can anybody please help me out on this??
Yours Truly
SLN
|
|
|
|
|
You probably just need to add the "out" keyword to your function call, just before the variable name.
void foo( YourComObject com )
{
object o;
com.GetXyz( out o );
...
}
Burt Harris
|
|
|
|
|
Thanks it worked!!!
Yours Truly
SLN
|
|
|
|
|
Hi
Does anyone have c# code for solving a linear system of eqns using Gaussian Elimination or some other nice technique? Or does anyone know the formula for inverse of a 6x6 matrix in closed form? Or is anyone aware of a plug-in linear algebra library for c#? Thanks,
sid
|
|
|
|
|
Here's[^] an open source project that might be some help.
α.γεεκ Fortune passes everywhere. Duke Leto Atreides
|
|
|
|
|
I have an instance of a control for each record in a dataset and the dataset is re-Filled frequently. What is the best way for the controls to access the data set or to update the controls' properties each time the data is read?
>>>-----> MikeO
|
|
|
|
|
I use controls like this - only the controls painted on the screen are created. Data are retrieved to DataSet and displayed during painting. Data are updated in try{} catch{} in TextChanged events of controls.
Hi,
AW
|
|
|
|
|
Hi,
I'm trying to write visual studio add-in.
I want to have toolbar with my own icons so I use this:
commands.AddNamedCommand(addInInstance,"MyCmd","MyCmd","Decription",true,1,ref cntG,(int)vsCommandStatus.vsCommandStatusSupported+(int)vsCommandStatus.vsCommandStatusEnabled);
But this code throws NullReferenceException
I added SatelliteDLLName and SatelliteDLLPath keys to registry.
File SatelliteDLLPath\SatelliteDLLName exists and it contains bitmap 16x16 with number 1 .
I've done exactly same thing before and it works, but now it doesn't.
<edit>
I created new project with new satellite dll and now it throws: COMException: Unspecified error
</edit>
Thank you for any help
i'm only pointer to myself
|
|
|
|