我正在用C#制作一个Windows机器人,他的一部分正在运行应用程序,例如!d命令运行Discord app或!sp运行Spotify应用程序。我正在通过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吗?或者也许只是应用程序故障?
答案 0 :(得分:0)
您可以编写一个小型主机应用程序来运行目标进程并等待退出。然后您的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);