Я создал приложение .NET в C #, и оно прекрасно работает, когда я запускаю его из окна консоли cmd, но если я попытался запустить приложение из своего собственного приложения, написанного на C ++, с помощью вызова CreateProcess (), я получаю исключение как следующим образом.
Unhandled Exception: System.TypeInitializationException: The type initializer for
'AppLog_NS.LogReader' threw an exception. ---> System.IO.FileNotFoundException:
Could not load file or assembly 'protobuf-net, Version=1.0.0.280, Culture=neutral,
ublicKeyToken=257b51d87d2e4d67' or one of its dependencies. The system cannot
find the file specified.File name: 'protobuf-net, Version=1.0.0.280,
Culture=neutral, PublicKeyToken=257b51d87d2e4d67' at AppLog_NS.LogReader..cctor()
Вот как я вызываю CreateProcess ().
GetSecurityInfo(GetCurrentProcess(), SE_KERNEL_OBJECT, 0, 0, 0, 0, 0, &sd);
saAttr.nLength = sizeof(saAttr);
saAttr.bInheritHandle = FALSE;
saAttr.lpSecurityDescriptor = sd;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
memset(&pi, 0, sizeof(PROCESS_INFORMATION));
// Launch bootstrapper
CreateProcess(NULL, cmd_path, &saAttr, NULL, FALSE, 0, NULL, NULL, &si, &pi);
FYI, созданный мной родительский процесс и приложение .NET находятся в одном и том же каталоге, и в этом же каталоге у меня есть protobuf-net.dll. В противном случае он не смог бы запуститься должным образом из окна cmd.
protobuf-net.dll отсутствует в GAC, и я предполагаю, что, пока он находится в одном и том же каталоге, он должен быть в состоянии найти dll и правильно запустить приложение .NET. Есть ли что-то, что мне нужно настроить или сделать что-то в этом случае?
Еще одна вещь, на которую следует обратить внимание, это то, что FusionLog показывает, что PrivatePath установлен в NULL, и говорит, что «Файл конфигурации приложения не найден». Это очень странно для меня, потому что я также добавил конфигурационный файл в тот же каталог, чтобы указать PrivatePath, но это, похоже, тоже ничего не делает.
Итак, я предполагаю, что мне нужно передать определенную переменную env или что-то еще при создании процесса .NET.
Но я не могу придумать ни одного варианта, который мне нужно использовать.
Кто-нибудь может дать мне какое-нибудь предложение?
Заранее спасибо.