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

  • Home
  • SEARCH
  • 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 64k
  • Answers 64k
  • 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
  • added an answer I'd like to point out Vala, which is a language… May 11, 2026 at 10:41 am
  • added an answer First of all, the base type of an enumeration has… May 11, 2026 at 10:41 am
  • added an answer I recommend looking at some of the UI Patterns at… May 11, 2026 at 10:41 am

Related Questions

I need to have a single instance application (as per this answer ), but
I need to have a summary field in each page of the report and
I need to have a thread signal another if the user wishes to interrupt
I need to have a script read the files coming in and check information
I need to have a working web browser in a fullscreen Direct3D application. For
I need to have a string, based on an integer, which should always have
I need to have a routine/function/stored proc/whatever to archive particular accounts from our 'active'
I need to have a process that compiles daily data into an PDF that
I need to develop a CRM system which will allow users to have a
I'd like to have a java.utils.Timer with a resettable time in java.I need to

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.