由控制台统治的应用程序取决于它
问题描述:
我在C#中制作了一个windows bot,他的一部分正在运行应用程序,例如, !d命令运行Discord应用程序或!sp运行Spotify应用程序。 Whene我正在通过CMD做一些运行良好,但有些像Discord和Visual Studio Code取决于控制台,这意味着如果我关闭控制台该应用程序将被关闭以及。由控制台统治的应用程序取决于它
if (input == "!d") {
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = @"C:\Users\User\AppData\Local\Discord\app-0.0.296\Discord.exe";
Process.Start(start);
Run();
}
这段代码用于启动应用程序。我应该在C#中使用另一种方法在cmd上使应用程序独立吗?或者,也许这只是应用程序故障?
答
您可以编写一个小型主机应用程序来运行目标进程并等待退出。然后您的bot应用程序可以运行主机并立即退出。
主机应用程序的代码 - 第一个参数是目标应用程序的路径。我使用Windows API隐藏控制台窗口:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace AppHost
{
class Program
{
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_HIDE = 0;
private static void Main(string[] args)
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
var start = new ProcessStartInfo { FileName = args[0] };
var process = Process.Start(start);
process.WaitForExit();
}
}
}
代码机器人 - 目标应用需要在双引号请注意路径:
var start = new ProcessStartInfo
{
FileName = "AppHost.exe",
Arguments = @"""C:\Program Files (x86)\Microsoft VS Code\Code.exe""",
};
var process = Process.Start(start);
你有没有试着用:' UseShellExecute = true;?' – McNets