错误command line option syntax error type command for help

zjwelcome 2011-03-19 10:19:02
请问一下各位
CreateProcess(path,(LPWSTR)path,NULL,NULL,false,0,NULL,NULL,&stinfo,&ProcessInfo))       

通过上面语句调用微软.net的2.0框架 程序dotnetfx.exe
其中 path路径有中文时候就会报上面的错误。
请问如何支持中文路径?
...全文
565 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xali 2011-03-20
  • 打赏
  • 举报
回复
可以试一下:设置语言环境
1,setlocale(LC_ALL,"chs");
2,setlocale(LC_ALL,".936");
3,std::locale loc = std::locale::global(std::locale(""));
//你的程序语句
std::locale::global( loc );
zjwelcome 2011-03-20
  • 打赏
  • 举报
回复
谢各位。。问题解决。。
pengzhixi 2011-03-20
  • 打赏
  • 举报
回复
这个应该是传的命令行参数有问题吧
zjwelcome 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 pengzhixi 的回复:]
出错信息
[/Quote]
调用的.net2.0框架程序弹出一个对话框就是这个“command line option syntax error type command for help”
pengzhixi 2011-03-20
  • 打赏
  • 举报
回复
出错信息
zjwelcome 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 pengzhixi 的回复:]
你的工程属性是否是UNICODE?
[/Quote]
是的
pengzhixi 2011-03-19
  • 打赏
  • 举报
回复
你的工程属性是否是UNICODE?
zjwelcome 2011-03-19
  • 打赏
  • 举报
回复

TCHAR test[MAX_PATH] =_T("C:\\Users\\Administrator\\Desktop\\桌面\\investment\\dotnetfx\\tw\\dotnetfx.exe");
if(!CreateProcess(path,test,NULL,NULL,false,0,NULL,NULL,&stinfo,&ProcessInfo))



哥们。。貌似还是不能执行
arong1234 2011-03-19
  • 打赏
  • 举报
回复
我都已经告诉你详细的步骤去做了,不会给你写代码的[Quote=引用 10 楼 zjwelcome 的回复:]
谢谢楼上的。。因为对C++不熟悉。请问我如何修正这个问题?
[/Quote]
zjwelcome 2011-03-19
  • 打赏
  • 举报
回复
谢谢楼上的。。因为对C++不熟悉。请问我如何修正这个问题?
arong1234 2011-03-19
  • 打赏
  • 举报
回复
说明它不兼容LPWSTR,如我所说,你不能仅仅为规避编译错误就做强制类型转换,有些转换是错误得

如果你的程序是Unicode的,LPCTSTR对应于LPCWSTR,CreateProcess要求第二个参数必须是可写的缓冲区,因此你用一个常量字符串显然是不行的,你需要分配一个TCHAR的数组,然后把path拷贝进去,使得它成为一个可写字符串

如果你工程不是Unicode的,在拷贝之前,你还必须进行字符集转化
[Quote=引用 8 楼 zjwelcome 的回复:]
上面如果不强制转换的话。。第二个参数会报错
[/Quote]
zjwelcome 2011-03-19
  • 打赏
  • 举报
回复
上面如果不强制转换的话。。第二个参数会报错
zjwelcome 2011-03-19
  • 打赏
  • 举报
回复

int StartExe(LPCTSTR path)
{
STARTUPINFO stinfo;
ZeroMemory((void*)&stinfo, sizeof(STARTUPINFO));
PROCESS_INFORMATION ProcessInfo;
stinfo.cb = sizeof(STARTUPINFO);
stinfo.dwFlags = STARTF_USESHOWWINDOW;
stinfo.wShowWindow = SW_SHOW;
if(!CreateProcess(path,path,NULL,NULL,false,0,NULL,NULL,&stinfo,&ProcessInfo))
{
//DWORD dwRet = GetLastError();//启动失败,获取异常值
return 0;
}
else
{
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);//等待安装完成,此方法为阻塞方法!
return 1;
}
}

arong1234 2011-03-19
  • 打赏
  • 举报
回复
如果path是兼容LPWSTR的,你不转换也可以,如果不兼容,你强制转换就是错误的
delphiwcdj 2011-03-19
  • 打赏
  • 举报
回复
命令行选项错误
zjwelcome 2011-03-19
  • 打赏
  • 举报
回复
字符集 也是 使用 Unicode 字符集
zjwelcome 2011-03-19
  • 打赏
  • 举报
回复
属性只修改一个将 运行库设置为 多线程 (/MT)。其他都是默认
pengzhixi 2011-03-19
  • 打赏
  • 举报
回复
不知道你这里有没有工程属性的,是否支持UNCODE字符。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧