gpt4 book ai didi

c# - 使用相同的参数启动程序的第二个副本

转载 作者:太空狗 更新时间:2023-10-29 21:51:23 26 4
gpt4 key购买 nike

应用程序使用相同的参数重新启动自身的另一个副本的正确方法是什么?

我目前的方法是执行以下操作

static void Main()
{
Console.WriteLine("Start New Copy");
Console.ReadLine();

string[] args = Environment.GetCommandLineArgs();

//Will not work if using vshost, uncomment the next line to fix that issue.
//args[0] = Regex.Replace(args[0], "\\.vshost\\.exe$", ".exe");

//Put quotes around arguments that contain spaces.
for (int i = 1; i < args.Length; i++)
{
if (args[i].Contains(' '))
args[i] = String.Concat('"', args[i], '"');
}

//Combine the arguments in to one string
string joinedArgs = string.Empty;
if (args.Length > 1)
joinedArgs = string.Join(" ", args, 1, args.Length - 1);

//Start the new process
Process.Start(args[0], joinedArgs);
}

不过好像里面的工作比较忙。忽略 vshost 的 strip 化,我仍然需要用 " 包装有空格的参数,并将参数数组组合成一个字符串。

有没有更好的方法来启动程序的新副本(包括相同的参数),也许是一种只需要传入 Enviroment.CommandLine 的方法或者采用字符串数组作为参数?

最佳答案

您必须引用包含空格的命令行参数(可能还有我不确定的其他字符)。也许是这样的:

var commandLine = string.Join(" ", args.Select(s => s.Contains(' ') ? "\"" + s + "\"" : s));
var newProcess = Process.Start("yourapplication.exe", commandLine);

此外,而不是使用

string[] args = Environment.GetCommandLineArgs();

您可以改为在 Main 方法中接受它们:

public static void Main(string[] args)
{
var commandLine = string.Join(" ", args.Select(s => s.Contains(' ') ? "\"" + s + "\"" : s));
var newProcess = Process.Start(Environment.GetCommandLineArgs()[0], commandLine);
}

您现在拥有的 vshost 解决方法似乎很好,或者您可以通过在项目的调试选项卡上取消选中“启用 Visual Studio 托管进程”来禁用整个 vshost。某些调试功能确实会在您这样做时被禁用。 Here对此有很好的解释。

编辑:

解决它的更好方法是将代码库获取到入口点程序集:

public static void Main(string[] args)
{
var imagePath = Assembly.GetEntryAssembly().CodeBase;
var commandLine = string.Join(" ", args.Select(s => s.Contains(' ') ? "\"" + s + "\"" : s));
var newProcess = Process.Start(imagePath, commandLine);
}

无论是否启用 vshost,这都适用。

关于c# - 使用相同的参数启动程序的第二个副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10854550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com