请问在程序中调用外部openssl.exe并传递指令生成证书时出错的有关问题
请教在程序中调用外部openssl.exe并传递指令生成证书时出错的问题
本人在PC上写了一个简单的MFC dialog程序,用CreateProcess()调用外部已经布置好的openssl.exe,并传递一些适用的指令(已经用cmd.exe直接运行过“openssl <指令>”,并且成功创建了所需证书),这种方式并没有按预期生成证书,现象是openssl.exe的黑框闪了一下。
目前已经做过的分析:用CreateProcess()调用另一个自行编写的test.exe,由它将接收的数据写到磁盘文件,成功(大串的指令以空格为间隔分别发送给test.exe中main()的argv[i])。这样是否能基本排除是调用出的错呢?
代码如下:
某次生成的指令如下:
req -utf8 -newkey rsa:1024 -keyout F:\7777777777777/yzsc.key -out F:\7777777777777/yzsc.req -extensions v3_req -config config.cnf -passin pass:BOOK -subj /C=CN/ST=Beijing/L=Beijing/O=wang/OU=wang/appid=/deviceType=CertDefault/sdid=/CN=7777777777777/emailAddress=wang@wang.com.cn
烦请各位大拿帮我分析一下原因。急啊谢了
------最佳解决方案--------------------
恩,应该是如你说的,命令行参数有问题
可以用ShellExecute等执行cmd命令行,然后再把openssl.exe以及参数作为cmd的命令执行来
------其他解决方案--------------------
关注下
------其他解决方案--------------------
感觉是由于openssl.exe接收指令的特性造成的,用过的朋友帮帮忙啊
------其他解决方案--------------------
搞定,果然传参问题。
------其他解决方案--------------------
小弟能请教一些OPENSSL的问题吗
本人在PC上写了一个简单的MFC dialog程序,用CreateProcess()调用外部已经布置好的openssl.exe,并传递一些适用的指令(已经用cmd.exe直接运行过“openssl <指令>”,并且成功创建了所需证书),这种方式并没有按预期生成证书,现象是openssl.exe的黑框闪了一下。
目前已经做过的分析:用CreateProcess()调用另一个自行编写的test.exe,由它将接收的数据写到磁盘文件,成功(大串的指令以空格为间隔分别发送给test.exe中main()的argv[i])。这样是否能基本排除是调用出的错呢?
代码如下:
//获取当前debug路径
LPTSTR lpszModuleDebug = new TCHAR[MAX_PATH];
GetModuleFileName(AfxGetApp()-> m_hInstance, lpszModuleDebug, MAX_PATH);
CString strPath = lpszModuleDebug;
int nPos = strPath.ReverseFind('\\');
strPath = strPath.Left(nPos);
strPath += L"\\opensslconfig\\openssl.exe";
CString strInfo;
certinfo.InfoToString(strInfo);
CString strCmdLine,strComLineTemp;
//strCmdLine = strPath;
strComLineTemp.Format(L"req -utf8 -newkey rsa:%d ",certinfo.m_nRSASize);
strCmdLine += strComLineTemp;
strCmdLine += L"-keyout ";
strCmdLine += certinfo.m_strCretPath;
strCmdLine += L"yzsc.key -out ";
strCmdLine += certinfo.m_strCretPath;
strCmdLine += L"yzsc.req -extensions v3_req -config config.cnf -passin pass:BOOK -subj ";
strCmdLine += strInfo;
// 进程启动信息
STARTUPINFO StartInfo;
PROCESS_INFORMATION pi;
memset(&StartInfo,0,sizeof(STARTUPINFO)); // 对程序的启动信息不作任何设定,全部清0
StartInfo.cb = sizeof(STARTUPINFO); // 设定结构的大小
StartInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
StartInfo.wShowWindow = SW_SHOW;//SW_HIDE;
if (!CreateProcess(strPath.GetBuffer(), strCmdLine.GetBuffer(), NULL, NULL, FALSE, NULL, NULL, NULL, &StartInfo, &pi))
{
return FALSE;
}
某次生成的指令如下:
req -utf8 -newkey rsa:1024 -keyout F:\7777777777777/yzsc.key -out F:\7777777777777/yzsc.req -extensions v3_req -config config.cnf -passin pass:BOOK -subj /C=CN/ST=Beijing/L=Beijing/O=wang/OU=wang/appid=/deviceType=CertDefault/sdid=/CN=7777777777777/emailAddress=wang@wang.com.cn
烦请各位大拿帮我分析一下原因。急啊谢了
------最佳解决方案--------------------
恩,应该是如你说的,命令行参数有问题
可以用ShellExecute等执行cmd命令行,然后再把openssl.exe以及参数作为cmd的命令执行来
------其他解决方案--------------------
关注下
------其他解决方案--------------------
感觉是由于openssl.exe接收指令的特性造成的,用过的朋友帮帮忙啊
------其他解决方案--------------------
搞定,果然传参问题。
------其他解决方案--------------------
小弟能请教一些OPENSSL的问题吗