Строка разделения, содержащая параметры командной строки в строку [] в C#

Существует несколько решений, обеспечивающих постоянную работу вашего сервиса.

Один из них даже называется forever. Здесь у вас есть обзор, подготовленный Экспресс .

Однако для производственных услуг я рекомендую пассажира Результат почти такой же, но гораздо большей масштабируемости. Например, вы можете настроить автоматическое добавление другого экземпляра.

Почти - потому что он предназначен для обеспечения доступности HTTP, а не постоянной работы приложения.

КСТАТИ: служба останавливается, потому что у вас есть исключение исключено.

Обновление

Если вы настаиваете на forever, то: (Мы говорим о том же навсегда ?)

  • Убедитесь, что [ 112] управляется одним и тем же пользователем. forever имеет отдельных менеджеров для всех пользователей.
  • Убедитесь, что вы сохранили свои данные в том же месте. (автоматический запуск, например, cron отличается от ручного запуска (переменные в env))
  • forever имеет --pidFile - тогда очень легко проверить, работает ли процесс
  • также ps -aux | grep node должен быть твоим большим другом.

Нет, я не объединила это. Когда у меня начались проблемы, я переключился на passenger. В конце концов, я сделал это хорошо, потому что у меня есть профессиональный мониторинг, который я запустил за меньшее время, чем поиск, как объединить вышеупомянутые пункты.

84
задан 5 revs 18 November 2008 в 18:48
поделиться

2 ответа

In addition to the good and pure managed solution by Earwicker, it may be worth mentioning, for sake of completeness, that Windows also provides the CommandLineToArgvW function for breaking up a string into an array of strings:

LPWSTR *CommandLineToArgvW(
 LPCWSTR lpCmdLine, int *pNumArgs);

Parses a Unicode command line string and returns an array of pointers to the command line arguments, along with a count of such arguments, in a way that is similar to the standard C run-time argv and argc values.

An example of calling this API from C# and unpacking the resulting string array in managed code can be found at, “Converting Command Line String to Args[] using CommandLineToArgvW() API.” Below is a slightly simpler version of the same code:

[DllImport("shell32.dll", SetLastError = true)]
static extern IntPtr CommandLineToArgvW(
    [MarshalAs(UnmanagedType.LPWStr)] string lpCmdLine, out int pNumArgs);

public static string[] CommandLineToArgs(string commandLine)
{
    int argc;
    var argv = CommandLineToArgvW(commandLine, out argc);        
    if (argv == IntPtr.Zero)
        throw new System.ComponentModel.Win32Exception();
    try
    {
        var args = new string[argc];
        for (var i = 0; i < args.Length; i++)
        {
            var p = Marshal.ReadIntPtr(argv, i * IntPtr.Size);
            args[i] = Marshal.PtrToStringUni(p);
        }

        return args;
    }
    finally
    {
        Marshal.FreeHGlobal(argv);
    }
}
71
ответ дан 24 November 2019 в 08:28
поделиться

Я взял Ответ от jeffrey L abitledgelege и немного улучшил его.

Теперь он поддерживает как одиночные, так и двойные кавычки. Вы можете использовать цитаты в самом параметрах, используя другие напечатанные цитаты.

Это также прокладывает цитаты из аргументов, поскольку они не способствуют информации о аргументе.

    public static string[] SplitArguments(string commandLine)
    {
        var parmChars = commandLine.ToCharArray();
        var inSingleQuote = false;
        var inDoubleQuote = false;
        for (var index = 0; index < parmChars.Length; index++)
        {
            if (parmChars[index] == '"' && !inSingleQuote)
            {
                inDoubleQuote = !inDoubleQuote;
                parmChars[index] = '\n';
            }
            if (parmChars[index] == '\'' && !inDoubleQuote)
            {
                inSingleQuote = !inSingleQuote;
                parmChars[index] = '\n';
            }
            if (!inSingleQuote && !inDoubleQuote && parmChars[index] == ' ')
                parmChars[index] = '\n';
        }
        return (new string(parmChars)).Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
    }
12
ответ дан 24 November 2019 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: