如果我通过CreateProcess()启动.NET进程,则无法加载文件或程序集“ protobuf-net”错误
|
我已经在C#中创建了一个.NET应用程序,当我从控制台cmd窗口运行该应用程序时,它运行良好。但是,如果我尝试通过调用CreateProcess()从自己用C ++编写的应用程序中启动该应用程序,则会收到以下异常。
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);
仅供参考,我创建的父进程和.NET应用程序都位于同一目录中,并且该目录中也有protobuf-net.dll。否则,它应该无法从cmd窗口正确启动。
protobuf-net.dll不在GAC中,我认为只要它在同一目录中,它就应该能够找到dll并正确启动.NET应用程序。在这种情况下,我需要配置什么吗?
还要注意的另一件事是,FusionLog显示PrivatePath设置为NULL,并说“未找到应用程序配置文件。”这对我来说很奇怪,因为我还将配置文件添加到了同一目录中以指定PrivatePath,但是似乎也什么也没做。
因此,我假设在创建.NET进程时需要传递某些env变量。
但是我真的没有想到我需要使用的任何选项。
谁能给我一些建议?
提前致谢。
没有找到相关结果
已邀请:
0 个回复