Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 92335
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 10, 20262026-05-10T23:10:15+00:00 2026-05-10T23:10:15+00:00

I need to have a single instance application (as per this answer ), but

  • 0

I need to have a single instance application (as per this answer), but it needs to be deployed via click once.

The problem is that I require that click once doesn’t automatically detect an update an attempt to load a newer version while the application is running. If it is running, then I need the other instance to be made active. Usually, when selecting a Click Once link, the very first thing it does is attempt to find an update. I want to intercept this and check for an already running instance prior to launching the normal update process.

Does anyone know how this is possible within a Click Once deployment scenario?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-10T23:10:15+00:00Added an answer on May 10, 2026 at 11:10 pm

    To tackle the problem, we built a prototype application which has the following two functionalities.

    1. Multiple instances on one pc are disabled. A single instance application is deployed via clickonce. When a user tries to start a second instance of the app, a message will pop up indicating that ‘Another instance is already running’.

    2. Checks for an update asynchronously, and installs the update if one exists. A message: ‘An update is available’ will pop up if there is an update available when a user runs a new instance.

    The process to build the demo application is as follows:

    Step 1: Detect an active instance application using Mutex class.

    namespace ClickOnceDemo {     static class Program     {         /// summary>         /// The main entry point for the application.         /// /summary>         [STAThread]         static void Main()         {             Application.EnableVisualStyles();             Application.SetCompatibleTextRenderingDefault( false );             bool ok;             var m = new System.Threading.Mutex( true, 'Application', out ok );             if ( !ok )             {                 MessageBox.Show( 'Another instance is already running.', ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString() );                 return;             }            Application.Run( new UpdateProgress() );         }     } } 

    Step 2: Handle update programmatically

    Before we do that, we should disable the automatic ClickOnce update checking (in the Publish — Updates… dialog).

    Then we create two forms: UpdateProgress and mainForm, where UpdateProgress indicates download progress and mainForm represents the main application.

    When a user runs the application, updateProgress will be launched firstly to check for updates. When updating completes, mainForm will start and updateProgress will be hidden.

    namespace ClickOnceDemo { public partial class UpdateProgress : Form  {   public UpdateProgress()         {             InitializeComponent();             Text = 'Checking for updates...';              ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;             ad.CheckForUpdateCompleted += OnCheckForUpdateCompleted;             ad.CheckForUpdateProgressChanged += OnCheckForUpdateProgressChanged;              ad.CheckForUpdateAsync();        }          private void OnCheckForUpdateProgressChanged(object sender, DeploymentProgressChangedEventArgs e)         {             lblStatus.Text = String.Format( 'Downloading: {0}. {1:D}K of {2:D}K downloaded.', GetProgressString( e.State ), e.BytesCompleted / 1024, e.BytesTotal / 1024 );             progressBar1.Value = e.ProgressPercentage;         }          string GetProgressString( DeploymentProgressState state )         {             if ( state == DeploymentProgressState.DownloadingApplicationFiles )             {                 return 'application files';             }             if ( state == DeploymentProgressState.DownloadingApplicationInformation )             {                 return 'application manifest';             }             return 'deployment manifest';         }          private void OnCheckForUpdateCompleted(object sender, CheckForUpdateCompletedEventArgs e)         {             if ( e.Error != null )             {                 MessageBox.Show( 'ERROR: Could not retrieve new version of the application. Reason: \n' + e.Error.Message + '\nPlease report this error to the system administrator.' );                 return;             }             if ( e.Cancelled )             {                 MessageBox.Show( 'The update was cancelled.' );             }              // Ask the user if they would like to update the application now.             if ( e.UpdateAvailable )             {                 if ( !e.IsUpdateRequired )                 {                     long updateSize = e.UpdateSizeBytes;                     DialogResult dr = MessageBox.Show( string.Format('An update ({0}K) is available. Would you like to update the application now?', updateSize/1024), 'Update Available', MessageBoxButtons.OKCancel );                     if ( DialogResult.OK == dr )                     {                         BeginUpdate();                     }                 }                 else                 {                     MessageBox.Show( 'A mandatory update is available for your application. We will install the update now, after which we will save all of your in-progress data and restart your application.' );                     BeginUpdate();                 }             }             else             {                 ShowMainForm();             }         }          // Show the main application form         private void ShowMainForm()         {             MainForm mainForm = new MainForm ();             mainForm.Show();             Hide();         }          private void BeginUpdate()         {             Text = 'Downloading update...';             ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;             ad.UpdateCompleted += ad_UpdateCompleted;             ad.UpdateProgressChanged += ad_UpdateProgressChanged;              ad.UpdateAsync();         }          void ad_UpdateProgressChanged( object sender, DeploymentProgressChangedEventArgs e )         {             String progressText = String.Format( '{0:D}K out of {1:D}K downloaded - {2:D}% complete', e.BytesCompleted / 1024, e.BytesTotal / 1024, e.ProgressPercentage );             progressBar1.Value = e.ProgressPercentage;             lblStatus.Text = progressText;         }          void ad_UpdateCompleted( object sender, AsyncCompletedEventArgs e )         {             if ( e.Cancelled )             {                 MessageBox.Show( 'The update of the application's latest version was cancelled.' );                 return;             }             if ( e.Error != null )             {                 MessageBox.Show( 'ERROR: Could not install the latest version of the application. Reason: \n' + e.Error.Message + '\nPlease report this error to the system administrator.' );                 return;             }              DialogResult dr = MessageBox.Show( 'The application has been updated. Restart? (If you do not restart now, the new version will not take effect until after you quit and launch the application again.)', 'Restart Application', MessageBoxButtons.OKCancel );             if ( DialogResult.OK == dr )             {                 Application.Restart();             }             else             {                 ShowMainForm();             }         }     } } 

    The application works well and we hope it is a good solution for the problem.
    Special thanks to Timothy Walters for providing the source code

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 87k
  • Answers 87k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer There is no way to do this effectively in code.… May 11, 2026 at 5:35 pm
  • Editorial Team
    Editorial Team added an answer If you're using the FormHelper, the easiest way is to… May 11, 2026 at 5:35 pm
  • Editorial Team
    Editorial Team added an answer You need to check the target of the action $('h3').click(function(e)… May 11, 2026 at 5:35 pm

Related Questions

We're building a Silverlight application which will be offered as SaaS. The end product
My Windows Forms application uses the following standard line of code so that visual
I recently wrote a quick-and-dirty proof-of-concept proxy server in C# as part of an
I believe several of us have already worked on a project where not only

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.