|
Well-played! I would not have thought of that.
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Skippums wrote: 1. Try hard-coding the path to the default exe location
<BitchSlap>Hard-coding a path for any reason is a cardnial sin. You should never, Never, NEVER, EVER do this!</BitchSlap> Unless you want to really piss off the person who comes in behind you to maintain your code. Then, you can expect a visit from a very large, intimidating man, wearing an expensive suit with a black leather coat and wielding a silenced pistol. Need I explain what happens next?
|
|
|
|
|
Maybe I wasn't clear on what exactly I was recommending. I was attempting to break down the problem into multiple steps. The progression is as follows...
Step 1: get your executable to run AFTER it is completely installed by hand-
starting a separate application which loads your app via hard-coded paths
Step 2: modify your code from step 1 so that it runs automatically AFTER the commit phase of the installer
Step 3: modify your code from step 2 so that it runs automatically PRIOR to the commit phase of the installer
Step 4: change the path to your executable so that it is NOT hard coded It has been my experience that most questions arise when people try to code the final step as the first step. I was simply trying to illustrate the steps that were skipped so that the person asking the question could step backward through the progression until he had working code that he could then move forward with. Clearly (at least to me) I didn't mean to hard-code the value and leave it. I was offering debugging advice, not coding advice. Hope this clears things up for you.
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Yes
we can do this with commit event in the Installed class.
with in after commint event write a process object and pass ur exe name with path.
application will be start automatically
i hope this is help 2 u.
Cheers
RRave
MCTS,MCPD
|
|
|
|
|
calling the exe using Process.Start() alone will not run the exe. you have to add the primary output of that exe project to install Custom Action in the deployment project.
|
|
|
|
|
|
Hi Rave,
I appreciate it, but I've tried to run the exe using Process.Start() in Commit event and it didn't work for me without adding the primary output of the project to Install folder in Custom Actions.
Without that the installation would finish as it would normally, but application didn't start.
Regards,
Blumen
|
|
|
|
|
Ok man
can u explian what u r try do?
after installed ur application will want o start automatically is it correct?
thanks
|
|
|
|
|
yep, thats correct.
My project is a Windows application, and the requirement is that it should run once the installation is complete.
So I created a custom installer class, coz I wanted to create a few folders during installation. In the Commit event of my custom installer class (dll), I'm creating these folders. In the deployment project, in Custom Actions, as displayed in the link you have sent me, I'm adding the primary output of my Windows application project to the Commit event (View - Editor - Custom Actions - Commit).
In Installer class, I'm calling the exe that I need to run after installation is complete using the following code:
if(System.IO.File.Exists(@savedState["TargetDir"].ToString() + "MyExe.exe"))
{
ProcessStartInfo psi = new ProcessStartInfo(@savedState["TargetDir"].ToString() + "MyExe.exe");
Process.Start(psi);
}
The only issue is that application starts running once the final screen of installation is displayed to the user.
Regards,
Blumen
|
|
|
|
|
OK blue
now you came to the junction,but u dont where u want to go,?
u take small assumes, like installation will compelete another 0.5 seconds.
so tell to ur process sleep 1 mins after start.because of within the that period ur installation will complete.
thanks.
|
|
|
|
|
Hey Guys
In my app a have a form that has to return a DialogResult, but the snag is that form also has to be an MDI child. but i get an InvalidOperationException when i FrmWhatever.ShowDialog();
is there any way around this?
Thanx
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
you.suck = (you.passion != Programming)
|
|
|
|
|
Hmm, why does the form has to be an MDI child???
|
|
|
|
|
cuz my boss want all windows for our app (and there are hundreds!) to be in one singe container (mdi parent)...
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
you.suck = (you.passion != Programming)
|
|
|
|
|
Straight off I don't think there's any easy way to achieve that, if I understand what your boss want. How about a MessageBox? Is MessageBox has to be child too? How about Open File dialog, folder browser dialog? The dialog form is no different from an Open File dialog box, IMO.
If your boss really must have that, you may consider hiding Form1 and show Form2, then when user select an action (OK or Cancel or Close), then hide Form2 and Show Form1. But the handling of DialogResult and returned value can be a mess.
So back to my original question, why the dialog form needs to be MDI child?
|
|
|
|
|
lol!
i see your point... what i dont get is why cant a dialog be an mdi child? silly microsoft
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
you.suck = (you.passion != Programming)
|
|
|
|
|
The best I can think of is to not have it as a mdiChild but a normal form - use showDialog but pass the MDI Container's child rectangle property to the forms constructor. You can then use the LocationChanged event to disallow movement of the dialog outside of that rectangle.
Passing the ClientRectangle doesn't work, it needs to be
RectangleToClient(ClientRectangle)
or
MdiParent.RectangleToClient(MdiParent.ClientRectangle)
if called from a child.
The X and Y (Top and Left) properties will give negative values so you'll need to subtract them from 0 to get the positive values you need.
This code works in the location changed (I'm sure it could be tidied up/improved but it does the job) where LimitRect is the rectangle passed above.
if (Top < (0 - LimitRect.Top))
{
Top = 0 - LimitRect.Top;
}
if (Left < (0 - LimitRect.Left))
{
Left = 0 - LimitRect.Left;
}
if (Right > LimitRect.Right)
{
Left = (LimitRect.Width - LimitRect.Left) - Width;
}
if (Bottom > LimitRect.Bottom)
{
Top = (LimitRect.Height - LimitRect.Top) - Height;
}
Dave
|
|
|
|
|
thanx man, ill look into it over the weekend !
it just hit 5pm here in south africa so im going home!
thanx again, have a go0d one!
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
you.suck = (you.passion != Programming)
|
|
|
|
|
I would create a custom event on the form, and fire it from the forms destructor. Pass the DialogResult is the EventArgs and handle the event from the calling form.
|
|
|
|
|
This was an interesting problem. I managed to solve it properly and made a little article here[^] out of it. Hope it helps.
Dave
|
|
|
|
|
Hey dave
Thanx again for that article, ive alredy implemented it in my app!!
i came across a strange bug tho, or maybe im just missing something
there is a difference between your demo and my app. i have FrmMain which is my mdiContainer, on that i have a menuStripItem "users", it shows FrmUsers (this is basicly a list of all the users registered for that application - this is not the dialog). On FrmUsers i have btnAddUser which shows FrmAdduser(this is the dialog window where i implemented your code).
so with your initial code the dialog window was confined within the rectangle of FrmUser which isnt even an mdiContainer, but the problem was FrmAddUser often is bigger than FrmUser (this depends on how many users are registered cuz FrmUser Resizes itself depending on how many rows in the DataGridView).
in an atempt to rectify this i did the following in FrmUsers...
foreach (Control thisControl in this.MdiParent.Controls)
{
if (thisControl is MdiClient)
{
}
}
this is where i found the bug, the rectangle that FrmAddUser is restricted to is in the wrong place! The X axis point is correct but the Y axis point is too low. in other words the rectangle is about 100 pixels(rough guess) below FrmMain
any idea sa to why this happens?
i could e-mail you a demo of this problem if it will help
thanx
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
you.suck = (you.passion != Programming)
|
|
|
|
|
Yeah, email it to me at
// deleted;
(typed it like that toavoid spam bots!) and I'll have a look.
Dave
modified on Wednesday, February 20, 2008 7:42 AM
|
|
|
|
|
Further thinking about your requirement, I just remember something that I did in a project.
You can have a "container" form, let's say FormContain form to contain both the FormList and FormUpdate. FormContain has a panel, and you will put both listing form and update form in the panel. Base on user action, you can bring FormList or FormUpdate to front.
|
|
|
|
|
thanx man, ill look into it over the weekend!
it just hit 5pm here in south africa so im going home!
thanx again, have a go0d one!
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
you.suck = (you.passion != Programming)
|
|
|
|
|
I want to dial a number from COM port.I am using Nokia 6300 as a modem which is connected to USB port. Even though computer is accepting mobile as a modem i am getting error in port opening. Sample programs which i used to run application gives error "No phone is connected" or "Unable to open port as it is busy in other application".
So can anybody tell me what may be the problem & how to overcome from it? Can anybody give me correct code to dial a number from COM port in C#.Net?
|
|
|
|
|
It could be due to the baud rate. This[^] article is about sending SMS but it may help. Once connected you should be able to use standard AT commands to dial.
Dave
|
|
|
|