То, чтобы заставлять CreateProcess наследовать консоль обработки вызовов

JSON.NET для спасения.

Сериализуйте его в JSON для сохранения в базе данных и Deserialize для восстановления коллекции .NET. Кажется, что это работает лучше, чем я ожидал от него с Entity Framework 6 & amp; SQLite. Я знаю, что вы попросили List, но вот пример еще более сложной коллекции, которая работает очень хорошо.

Я отметил сохраненное свойство с помощью [Obsolete], поэтому было бы очень очевидно, что «это не является тем свойством, которое вы ищете "в процессе обычной кодировки. Свойство «real» помечено значком [NotMapped], поэтому инфраструктура Entity игнорирует его.

(несвязанный тангенс): вы можете сделать то же самое с более сложными типами, но вам нужно спросить себя, вы просто попросили свойства объекта слишком сложны для вас? (да, в моем случае).

using Newtonsoft.Json;
....
[NotMapped]
public Dictionary MetaData { get; set; } = new Dictionary();

///   for database persistence. 
[Obsolete("Only for Persistence by EntityFramework")]
public string MetaDataJsonForDb
{
    get
    {
        return MetaData == null || !MetaData.Any()
                   ? null
                   : JsonConvert.SerializeObject(MetaData);
    }

    set
    {
        if (string.IsNullOrWhiteSpace(value))
           MetaData.Clear();
        else
           MetaData = JsonConvert.DeserializeObject>(value);
    }
}

7
задан 4 December 2008 в 22:02
поделиться

2 ответа

Я сделал это путем передачи в каналах для hStdInput, hStdOutput, и hStdError и вручную маршрутизации данных из hStdOutput и hStdError каналы к консоли.

1
ответ дан 7 December 2019 в 01:28
поделиться

Не уверенный, если debeige когда-нибудь решал это, но мне было нужно то же самое, но запускающий другой поток для слушания вывода stdout, только для помещения его на stdout казалось гаек мне.

следующие работы для меня, и немного отличаются, чем, что он первоначально отправил. Я думал сначала, что это не будет работать, если Вы не установите si.cb, но когда я прокомментировал, что в моем, это все еще работало, таким образом... YMMV.

   STARTUPINFO siStartInfo;
   ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
   siStartInfo.cb = sizeof(STARTUPINFO); 
   siStartInfo.hStdError = GetStdHandle(STD_OUTPUT_HANDLE); 
   siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); 
   siStartInfo.hStdInput = g_hChildStd_IN_Rd;  // my outgoing pipe
   siStartInfo.dwFlags |= STARTF_USESTDHANDLES;

// Create the child process. 

   bSuccess = CreateProcess(
      NULL,         
      szCmdline,    
      NULL,         
      NULL,         
      TRUE,         
      0,            
      NULL,         
      NULL,         
      &siStartInfo, 
      &piProcInfo); 
1
ответ дан 7 December 2019 в 01:28
поделиться
Другие вопросы по тегам:

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