Check for process before Install App

Here is my scenario. A user installs the c# application from my website. After install the application starts (hidden) and puts an icon in the system tray. Now lets say the user goes back to the website and clicks install again. I want a way to check and kill the process if there is one before the install. I have the code to kill a process but not sure on where to put it before the install happens.

Thanks

static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            int x = 0;
 
            foreach (Process p in System.Diagnostics.Process.GetProcessesByName("NameOfApp"))
            {
                if (x > 0)
                {
 
                    try
                    {
                        p.Kill();
                        p.WaitForExit(); // possibly with a timeout
                    }
                    catch (Win32Exception winException)
                    {
                        // process was terminating or can't be terminated - deal with it
                    }
                    catch (InvalidOperationException invalidException)
                    {
                        // process has already exited - might be able to let this one go
                    }
 
                }
                x++;
 
 
            }
            
 
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

Open in new window

choldenAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

ahmad2121Commented:
By "install" do you mean: you are generating an MSI or exe using an installer project, or is this something else?
0
choldenAuthor Commented:
Thanks for the quick reply.

I right click to build the project. This creates the msi and exe in the release folder. When a user clicks the install button on the website it links to setup.exe and installs the application on the users computer.

Thanks
0
ahmad2121Commented:
So you need to set a custom install action. The easiest way of doing this:

if your project (main project, not setup project) has an Installer.cs (or Installer1.cs), skip the step below, if it doesn't you need to add one.

to add:

right click on project > Add > New Item > Installer Class

Now, right click on Installer.cs (or Installer1.cs), click "View Code"

type the following:

        public override void Install(IDictionary stateSaver)
        {
            //close process code here
            base.Install(stateSaver);
        }

replace the comment with your code.

you could do it in the Commit stage

        public override void Commit(IDictionary savedState)
        {
            //close process code here
            base.Commit(savedState);
        }

which does it before the install happens, and not when they execute the installer.

For more info, look here:

http://msdn.microsoft.com/en-us/library/d9k65z2d.aspx
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

choldenAuthor Commented:
I tried putting the code int the public override void Install before and that didn't work so I put it in the Commit and it works great. Now the only thing is that the killed process icon is still in the system tray until you move the mouse over it. Is there a way I can get rid of that icon when process is killed?

Thanks
0
ahmad2121Commented:
kill does a force, try:

p.CloseMainWindow()

or

p.Close()
0
ahmad2121Commented:
there is a more clever solution. In the OnClose or OnClosing method, you could do this:

notifiyIcon.Visible = false;
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
.NET Programming

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.