Запустите C# скрипт (scriptcs) C# напрямую, не открывая окно командной строки
Есть ли в Windows способ запустить скрипт.csx напрямую (например, дважды щелкнув файл, или из меню "Пуск", или через панель запуска приложений, например, Launchy), чтобы скрипт работал в фоновом режиме, не открывая окно командной строки?
Например, скажем, у меня есть простой скрипт "lowercase.csx", который просто берет любой текст в моем буфере обмена, преобразует его в нижний регистр и помещает результат обратно в мой буфер обмена. Я хочу иметь возможность дважды щелкнуть этот файл.csx, и он будет работать полностью в фоновом режиме, не открывая никаких окон.
В настоящее время и ScriptCS.exe, и новый модуль запуска csi.exe, который поставляется с обновлением 1 VS2015, откроют окно консоли при запуске файла.csx, даже если этот файл ничего не выводит на консоль.
Примечание: я знаю, что новое окно не открывается, если вы запускаете скрипт из окна консоли. То, что я хочу, чтобы запустить скрипт в контексте без командной строки и чтобы он не открывал никаких окон.
Примечание 2: эквивалентом того, что я хочу в "CS-Script" (альтернатива ScriptCS), является запуск файлов с помощью "csws.exe".
3 ответа
scriptcs не поддерживает это. Однако есть приложение, которое решает эту проблему: https://gitlab.com/Lions-Open-Source/ScriptCSW
Вы можете сделать свою собственную версию csi.exe
который работает без консоли.
Просто создайте новый проект, убедитесь, что для Type задано WinForms вместо Console, затем добавьте пакет сценариев C# из NuGet и скопируйте и вставьте исходный код csi.exe.
Обходной путь - создать собственную программу, которая запускает ее в фоновом режиме, как csws.exe.
Начните с создания консольного приложения.
public static void Main(string[] args)
{
var startInfo = new ProcessStartInfo("path to csi.exe")
{
CreateNoWindow = true,
Arguments = args[1],
RedirectStandardOutput = true,
UseShellExecute = false,
};
Process.Start(startInfo);
}
(Вы, очевидно, захотите передать остальные аргументы и проверить, чтобы убедиться, что файл был передан и т. Д., Но это должно помочь вам начать работу. И я написал этот ответ на своем Mac, так как моя коробка с Windows находится в магазине, поэтому я не могу гарантировать, что это сработает.)
Затем, чтобы консольное приложение не показывало окно, измените его на приложение Windows из консольного приложения на экране свойств проекта, как описано в этом вопросе.
Наконец, настройте файлы.csx, чтобы они всегда открывались вместе с вашим приложением. Затем вы можете дважды щелкнуть по ним, и они будут работать без окна.
Создайте пакетный файл и добавьте (в этом примере в csi.exe, установленный для VS 2019):
@echo off
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Roslyn\csi.exe" "C:\myscript.csx"