CefSharp如何重命名和嵌入BrowserSubProcess.exe

问题描述 投票:-1回答:1

我非常绝望。我在C#中找不到任何示例代码。我想重命名BrowserSubProcess.exe,我希望它嵌入我的主exe,如果可能的话。

我知道这个解决方案;

https://github.com/cefsharp/CefSharp/issues/1149#issuecomment-225547869

Rename CefSharp.BrowserSubprocess winforms

但我无法实现它。我需要示例程序或代码才能理解。我希望@amaitland会看到这个并帮助我。

c# winforms cefsharp
1个回答
0
投票

我将BrowserSubProcess Program.cs嵌入到我的Program.cs中,因此它现在已嵌入。

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        if (args.Count() < 5)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new LoginForm());
        }
        else
        {
            MyBrowserSubProcess(args);
        }
    }

    static int MyBrowserSubProcess(string[] args)
    {
        Debug.WriteLine("BrowserSubprocess starting up with command line: " + String.Join("\n", args));

        SubProcess.EnableHighDPISupport();

        int result;
        var type = args.GetArgumentValue(CefSharpArguments.SubProcessTypeArgument);

        var parentProcessId = -1;

        // The Crashpad Handler doesn't have any HostProcessIdArgument, so we must not try to
        // parse it lest we want an ArgumentNullException.
        if (type != "crashpad-handler")
        {
            parentProcessId = int.Parse(args.GetArgumentValue(CefSharpArguments.HostProcessIdArgument));
            if (args.HasArgument(CefSharpArguments.ExitIfParentProcessClosed))
            {
                Task.Factory.StartNew(() => AwaitParentProcessExit(parentProcessId), TaskCreationOptions.LongRunning);
            }
        }

        // Use our custom subProcess provides features like EvaluateJavascript
        if (type == "renderer")
        {
            var wcfEnabled = args.HasArgument(CefSharpArguments.WcfEnabledArgument);
            var subProcess = wcfEnabled ? new WcfEnabledSubProcess(parentProcessId, args) : new SubProcess(args);

            using (subProcess)
            {
                result = subProcess.Run();
            }
        }
        else
        {
            result = SubProcess.ExecuteProcess();
        }

        Debug.WriteLine("BrowserSubprocess shutting down.");

        return result;
    }

    private static async void AwaitParentProcessExit(int parentProcessId) 
    {
        try 
        {
            var parentProcess = Process.GetProcessById(parentProcessId);
            parentProcess.WaitForExit();
        }
        catch (Exception e) 
        {
            //main process probably died already
            Debug.WriteLine(e);
        }

        await Task.Delay(1000); //wait a bit before exiting

        Debug.WriteLine("BrowserSubprocess shutting down forcibly.");

        Environment.Exit(0);
    }

}

我的BrowserSubprocessPath是我的主要exe。

settings.BrowserSubprocessPath = System.AppDomain.CurrentDomain.FriendlyName;
© www.soinside.com 2019 - 2024. All rights reserved.