通过控制台相关性运行的应用

时间:2016-12-27 23:43:49

标签: c# windows bots

我正在用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吗?或者也许只是应用程序故障?

1 个答案:

答案 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);