|
Here is the documentation of MSIEXEC's command line options: MSIEXEC on MSDN[^]
To give additional values for global properties you have to put them at the end of your call to msiexec in the form:
msiexec /i Sample.msi PROPERTY=VALUE
Regards,
mav
|
|
|
|
|
mav,
I have found the particular documentation you have referenced, and have spent several hours reading it and trying the above syntax. However, it appears that there is no way to link the properties on the UI dialogs and the Property table in the msi database. I have used Orca to look at the database and none of the properties from the UI dialogs are present except for one entry for the each of the edit controls (EDITB1 through EDITB4). Each of these entries are global (all upper case), but do not seem to be connected to anything that actually displays on the UI. They all have a value of 1, but changing that using the above syntax does not do anything - at least that I can determine.
I know the syntax works, because I can set things like TARGETDIR and see the change in the dialog when it is displayed.
|
|
|
|
|
I know it can be a bit confusing, but just try the following:
In your setup project, add a user dialog with textboxes.
Then set Edit1Property to TEST1 and Edit1Value to [TEST1] .
When you build and run your setup, the user dialog will pop up and there will be no entry in the first textbox.
If you call your setup using
msiexec /i mysetup.msi TEST1=ThisIsATest
then the first textbox will show ThisIsATest instead.
Regards,
mav
|
|
|
|
|
mav,
Thanks a bunch. The missing piece of the puzzle (which I found nowhere in the docs I read) is this:
'Then set Edit1Property to TEST1 and Edit1Value to [TEST1]'
A most critical bit of information and much appreciated!
|
|
|
|
|
mav,
Thanks a bunch. The missing piece of the puzzle (which I found nowhere in the docs I read) is this:
'Then set Edit1Property to TEST1 and Edit1Value to [TEST1]'
A most critical bit of information and much appreciated!
|
|
|
|
|
mav,
I have another question regarding passing in Property values from the command line.
The dialog has two properties. One is normally blank and the method you describe works perfectly to set it from the command line during a silent install. The second property has a default value that one might wish to set to a non-default value from the command line during a silent install.
Now, it seems that one must somehow use the MsiSetProperty method in a custom action that checks to see if the passed in value of the property is a null string, and if so, sets it to the default value. It also seems that one would have to write a custom dll to do this, and link it properly in the custom actions editor in the deployment project. Is this the correct way to accomplish this or is there something simpler?
|
|
|
|
|
Mav, thanks for sharing this information - it was very helpful in understanding how to pass a command line parameter to the Installer and see that value show up on a text field. I have a question though, how can I programatically detect that I didn't get a command line parameter and populate those text fields another way? Perhaps I read the registry or a text file. I want to handle the situation where I prompted a user for something during the first install, and subsequent installs I show them the previous value and allow them to change it - unless I get a command line argument - which trumps this logic.
Thanks again for sharing the information though...very helpful. -Ron
|
|
|
|
|
Does anyone have any links to example code for (any language, but prefer .net something) using Microsoft Live Communications Server? I have been reading the msdn info, but haven't found sample code for a simple app. I just want to set up a small messaging window embedded in a help desk tool. It doesn't have to be fancy, just queue messages to the help desk, and allow simple text messages to be typed back and forth like a chat app, but without all the fancy features.
An alternative would be a way to embed a windows messenger pane in a .net app.
Thanks for any info you can point me to.
|
|
|
|
|
Hello all,
I am interested in adding several HTML files (and images from those files) to a solution and navigating a winform web browser control (from VS 2005 beta2) to those files when the user clicks through links on one of the pages. Can you tell me how these files are added to a solution/project and provide an example of the path that would be used in the code to navigate to them? Thanks for your help!
-CS
|
|
|
|
|
add->existing file. You can add any sort of file you want, I thought. If not, perhaps you need to add as a resource ?
If the file is on disc, then you just need to give your browser the full path to the file, and it should render it.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Thanks for the reply Christian. I added an html file and an included jpg image using your add->existing file recommendation. The problem now is that I need a relative path to the file because the user will not enter the url themselves. This is going to be a relatively small set of html help pages that will be stored locally and the browser will open to the first page within the winform browser control when the user clicks on the help menu. Is this possible?
Thanks again.
-CS
|
|
|
|
|
You can get the path to your application directory if you need an absolute path. Otherwise, the relative path from your exe is going to be known, isn't it ? Unless you're going to edit the files, I don't see why they need to be part of your 'solution' anyhow, just put them in a folder in a known location, relative to the exe.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Thanks again for your help.
-CS
|
|
|
|
|
hello,
I am creating an application in .NET I want the application to display a message to inform the user that the .net framework should be installed instead of saying there is a missing dll when the user tries to run the application
|
|
|
|
|
|
Your requirements are self excluding. You can't create a .NET application that checks to see if the .NET Framework is installed. It HAS to be installed before you launch your application, otherwise, how is it going to launch in the first place?
You have two options.
1) Your installer must handle installing the .NET Framework required by your application.
2) You write a launcher application in Visual C++ (not Managed C++!!) that checks for the existance of the correct version of the .NET Framework, then if found, launches the real application, and if not, puts up a dialog telling the user to install the correct version of .NET.
Option #1 is MUCH easier to deal with.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
<br />
public void task()<br />
{<br />
Thread.Sleep(9000);<br />
}<br />
private void button_Click(object sender, System.EventArgs e)<br />
{<br />
this.progressBar1.Value=0;<br />
Thread t=new Thread(new ThreadStart(task));<br />
t.Start();<br />
while((t.ThreadState & (System.Threading.ThreadState.Stopped | System.Threading.ThreadState.Unstarted)) == 0)<br />
{<br />
if(this.progressBar1.Value==this.progressBar1.Maximum)<br />
{<br />
this.progressBar1.Value=this.progressBar1.Minimum;<br />
}<br />
this.progressBar1.PerformStep();<br />
Thread.Sleep(500);<br />
}<br />
t.Join();<br />
}<br />
works the first time, progressbar progresses nice and neat, never works again. what am i missing here?
|
|
|
|
|
You'd be better off encapsulating your ProcessBar code into it's own seperate control. Something that includes it's own Timer to increment itself. You could than use this control in whatever project you wanted and you wouldn't have to worry about coding some custom garbage like what you posted.
Take a look at this[^] article on MSDN for an example.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I don't know how it works the first time. You are blocking the UI thread by looping till the worker thread completes. So your calls to PerformStep won't really get through till button_Click completes, by which time you're already done.
I'd suggest that you update the progress bar from the worker thread (by using BeginInvoke/Invoke as this[^] article describes.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
i make a query on my database.
I want the image data inside a row.
I select it and i start to read data.
The problem is that sometimes there is no data inside, so if i try to read i get exception.
Can i check if there is data inside that field before start ot read?
That field doesn't support NULL default value.
i use Microsoft Access database .mdb and ADO.NET
|
|
|
|
|
If the field doesn't support NULL and it can be blank, then your only option is to check the length of the data in the field. Images are usually going to be more than 0 bytes long.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Hi,
I want to rotate a control, take for example a button Control or a label control to some angle. But i dont know how to attain that..
i tried setting the region of the control with a graphics path whose transform set to rotate about its center...but im not able to get the output...
Can anybody help me?
Thanks,
Rajesh
|
|
|
|
|
Off the top of my head, you'll have to create your own version of the controls you want to visually rotate and supply the functionality for it.
There may be another way to do it by dropping the controls in some other container and rotating the container somehow, but i really can't see that happening.
Another option is a 3rd party Windows Forms Control library.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Right off the very tip top of my head....
Could you just decrement the X size/location and increment the Y size/location in a for loop (or do loop)? The text wouldn't rotate, but the control would appear too.
Just a thought.
Of course you have to mark your start position and reverse at 90 degrees, etc, etc...
www.lovethosetrains.com
|
|
|
|
|
No, it wouldn't. It would just make the button appear tall and narrow, not rotated to any angle. Re-read the original post...
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|