Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RequestSingleInstanceLockAsync callback does not seem to work #519

Closed
Delpire opened this issue Dec 8, 2020 · 3 comments
Closed

RequestSingleInstanceLockAsync callback does not seem to work #519

Delpire opened this issue Dec 8, 2020 · 3 comments
Assignees
Labels
Milestone

Comments

@Delpire
Copy link

Delpire commented Dec 8, 2020

  • Version: 9.31.2
  • Target: Windows 10

I cannot get the RequestSingleInstanceLockAsync callback to work at all. I have tried several things and it just does not seem to get called.

I have set up a test to see if its firing. Basically, if a second instance is launched, I just want it to kill the first instance. It does not kill the app. In my actual app, I want it to restore the window if necessary and focus the window; that wouldn't work either. It seems the callback just isn't being called at all.

The lock is working, it won't launch the second instance. (Although it does launch the splash screen which is not very nice).

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    app.UseRequestLocalization(localizationOptions);

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapBlazorHub();
        endpoints.MapFallbackToPage("/_Host");
    });

    if (HybridSupport.IsElectronActive)
    {
        var task = Electron.App.RequestSingleInstanceLockAsync(MyCallback);
        var hasLock = task.GetAwaiter().GetResult();
        if (!hasLock)
        {
            Electron.App.Exit();
            return;
        }
        // Normal browser window setup, etc.
    }
}

public void MyCallback(string[] args, string directory)
{
    Electron.App.Exit(); // !!! This is never executed.
}
        

Any idea what is going on here? Or am I using this incorrectly?

@matanelrb
Copy link

Hi, any idea when will this bug get fixed?

@matanelrb
Copy link

I have worked out a temporary fix. Since I can tell apart what are the first and second instance, I can use named pipes in order to send over the arguments to the first instance. And on the first instance have a thread which will run at the background which will listen to the named pipe and act accordingly. Problem is I can't extract the arguments out of the second instance since they don't have switches. So is there any way of extracting the whole arguments array? I need the single instance use in order to implement OAuth for my app so there is only one argument which is passed to the second instance.
Achieving that will give me a full temporary solution to the problem until you fix the bug.

Thanks.

@GregorBiswanger
Copy link
Member

Hi @matanelrb
the support of handle command line arguments in singleInstance is implemented for the next Electron.NET 13.5.1 release.

see #520

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants