帮忙解释一下createprocess,createprocessA,createprocessW的区别

wts 2009-06-05 01:55:32
如题。
有个程序,调用createprocessW的就可以启动,而调用createprocess就可能不成功。
调用createprocess的时候,返回值是成功的,但程序却根本没启动。
而大部分的程序,用createprocess都可以成功启动。
所以就有点困惑了,createprocess,createprocessW,createprocessA都有什么区别?
什么时候,应该使用哪个API?

一律使用createprocessW可以吗?

谢谢。

不懂的,不会的,学习的,就别顶了,我会自己关注帖子,谢谢合作。
另外别贴一大堆API参数说明。
...全文
1821 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuqin3 2009-11-08
  • 打赏
  • 举报
回复 1
CreateProcessA -> The ANSI version of this function
CreateProcessW -> The Unicode version of this function
dinoalex 2009-06-12
  • 打赏
  • 举报
回复 1
实际上Windows的内部都采用宽字符,所以前者只是把字符串转换成宽字符格式,然后调用后者。

可以理解为,就算是A,win也会转成W
dinoalex 2009-06-12
  • 打赏
  • 举报
回复
在WIN32系统中Windows的内部都采用宽字符
shadowstar 2009-06-12
  • 打赏
  • 举报
回复
对于16位的应用程序,或者在Win9x下运行的程序,有的不支持..W函数。
wts 2009-06-12
  • 打赏
  • 举报
回复
能回答一下,后半段问题么?
那createprocessA在Windows平台什么时候用到呢?启动dos程序?启动16位程序?
换句话说,就是我自己开发的程序,完全不必考虑A的情况?就没有特殊情况么?
shadowstar 2009-06-12
  • 打赏
  • 举报
回复
如果你都用宽字符就可以都用..W
wts 2009-06-12
  • 打赏
  • 举报
回复
我用的Delphi2007 感觉和2009好像差不多。
按照楼上两位的说法,那是不是在Windows平台上,无论启动什么软件,我都可以用W方式?因为这个API是我主动调用的,所以传入参数是宽还是窄,完全由我来决定,是这样吧?

换句话说,就是我自己开发的程序,完全不必考虑A的情况?就没有特殊情况么?
shadowstar 2009-06-12
  • 打赏
  • 举报
回复
如果你的程序是定义了UNICODE,用的就是带W的,否则就是A。

两者没有任何区别,除了字符宽度不一样。

这里是Delphi版,Delphi没有那样的定义,旧版的Delphi用的都是..A,2009以后版本默认都是..W。

同样一个语句,你可以用A或者W两种方式来调用,只要把字符宽度转换一下。

var
sa: AnsiString;
sw: WideString;
begin
sa := 'c:\1.exe';
sw := 'c:\1.exe';
CreateProcessA(.. PAnsiChar(sa) ..);
CreateProcessW(.. PWideChar(sw) ..);
end;
wts 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dinoalex 的回复:]
在Win32位API中,创建进程是由CreateProcess()完成的。这实际上是个宏定义,

Windows NT 头文件使用宏,如下所示选择相应的 API:
#ifdef UNICODE
#define CreateProcess CreateProcessW
#else
#define CreateProcess CreateProcessA
#endif // !UNICODE

根据不同的情况定义成CreateProcessA ()或CreateProcessW()之一

两个函数的区别仅在于字符串的表达,前者采用ASCII字符,而后者采用“宽字…
[/Quote]

谢谢,解释的比较清楚。
那createprocessA在Windows平台什么时候用到呢?启动dos程序?启动16位程序?
wts 2009-06-12
  • 打赏
  • 举报
回复
OK,基本明白了,谢谢各位!
shadowstar 2009-06-11
  • 打赏
  • 举报
回复
操作系统版本
Delphi版本
二次调用代码
dinoalex 2009-06-11
  • 打赏
  • 举报
回复
在Win32位API中,创建进程是由CreateProcess()完成的。这实际上是个宏定义,

Windows NT 头文件使用宏,如下所示选择相应的 API:
#ifdef UNICODE
#define CreateProcess CreateProcessW
#else
#define CreateProcess CreateProcessA
#endif // !UNICODE

根据不同的情况定义成CreateProcessA ()或CreateProcessW()之一

两个函数的区别仅在于字符串的表达,前者采用ASCII字符,而后者采用“宽字符”、即Unicode。

实际上Windows的内部都采用宽字符,所以前者只是把字符串转换成宽字符格式,然后调用后者。

那么你选择用CreateProcessW 较好
wts 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 dinoalex 的回复:]
不成功的可能是你所调用的是程式所影射的不是一个程式,如所影射的是DLL
[/Quote]

不懂你的意思,能具体说说吗?
dinoalex 2009-06-06
  • 打赏
  • 举报
回复
不成功的可能是你所调用的是程式所影射的不是一个程式,如所影射的是DLL
wts 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 CoolSlob 的回复:]
在调用createprocess后,尝试ShowMessage(SysErrorMessage(GetLastError)))看看
[/Quote]

提示是:拒绝访问
wts 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 CoolSlob 的回复:]
看来垃圾回复不是个别现象了,看把楼主给惹得。。。
[/Quote]

这个没什么,只要是认真回复就是欢迎的。
日总是我哥 2009-06-06
  • 打赏
  • 举报
回复
在调用createprocess后,尝试ShowMessage(SysErrorMessage(GetLastError)))看看
日总是我哥 2009-06-06
  • 打赏
  • 举报
回复
CreateProcResult := CreateProcess(nil,PChar(AppPath), nil, nil, false,
DETACHED_PROCESS, nil, PChar(appDir), StartUpInfo, ProcessInformation);
-----------
把变量声明也贴出来,特别是StartUpInfo的声明。

[Quote=引用 6 楼 duzif 的回复:]
其实windows api中很多函数都有这三种表示方法,实际上完成功能的是两个宽字符版本CreateProcessW和窄字符版本CreateProcessA
CreateProcess则默认的调用CreateProcessW
[/Quote]
需要说明的是,在Delphi2009版本之前,CreateProcess默认是声明为CreateProcessA,到了Delphi2009之后,由于支持Unicode,所有api函数默认使用宽字符调用形式。
日总是我哥 2009-06-06
  • 打赏
  • 举报
回复
看来垃圾回复不是个别现象了,看把楼主给惹得。。。
wts 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dinoalex 的回复:]
CreateProcessA -> The ANSI version of this function

CreateProcessW -> The Unicode version of this function

请参照http://msdn.microsoft.com/en-us/library/ms682425.aspx
[/Quote]

这个我也知道啊。就是不知道如何决定用哪个
加载更多回复(8)
内容概要:本文系统介绍了TVP-SV-FAVAR(时变参数-随机波动率-因子增广向量自回归)模型的理论基础与Matlab代码实现方法,重点围绕其在处理高维时间序列数据中时变特征、随机波动率及潜在公共因子的能力展开。文章详细解析了模型的核心构成,包括因子提取、时变参数设定、随机波动率建模以及基于贝叶斯框架的参数估计流程,并配套提供完整的Matlab程序代码与实证案例演示,帮助读者理解并复现该复杂计量经济模型的实际应用过程。; 适合人群:具备扎实计量经济学背景和一定Matlab编程能力的研究生、高校科研人员及金融机构量化分析师,尤其适用于从事宏观经济建模、货币政策评估、系统性风险测度等方向的研究工作者。; 使用场景及目标:①深入掌握TVP-SV-FAVAR模型的建模逻辑与算法实现细节;②将其应用于宏观经济变量间的动态关联分析、政策冲击效应评估及不确定性传导机制研究;③复现国际顶级期刊(如AER、JME)中的相关实证研究,提升学术论文撰写与科研创新能力; 阅读建议:建议读者结合文中提供的Matlab代码逐模块调试运行,辅以经典文献深化对先验设定、MCMC采样及结果解读的理解,同时鼓励将模型拓展至其他领域(如金融市场、区域经济)进行创新性实证研究。

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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