CreateProcess执行批处理文件

CreateProcess to execute batch file

本文关键字:批处理文件 执行 CreateProcess      更新时间:2023-10-16

在我创建的Windows应用程序中,我试图运行指向.vbs的批处理文件。它运行vbs脚本,但不根据需要修改注册表。但是,如果我手动运行批处理文件,它会正常工作。有人知道问题出在哪里吗?我认为这是权限,但为什么它会重要,如果我手动点击批处理文件或如果我的程序打开它?无论如何,我已经修改了批处理文件,试图以管理员身份运行,但似乎没有任何在线工作。

它没有说CreateProcess可以运行批处理文件。由于批处理文件不是程序,CreateProcess不能对它做任何事情。执行批处理文件。

你应该通过测试返回值和阅读文档知道这一点。

从帮助

返回值

如果函数成功,返回值非零。

如果函数失败,返回值为零。要获取扩展的错误信息,请调用GetLastError。

也来自Help

要运行批处理文件,必须启动命令解释器;"lpApplicationName"设置为"cmd.exe","lpCommandLine"设置为批处理文件名。


这就是你做错的地方

1。你的程序设计真奇怪。

任何程序都可以提示用户输入并写入注册表。您正在编写一个程序,该程序将至少有四种不同的方式来编写注册表。. Net、wash、wmi、api)。然后运行有两种方式写入注册表的批处理(WMI和reg.exe)。然后一个vbs文件有两种方式(WMI, WSH)。

2。不测试错误

你必须测试错误。唯一可以访问错误的人是YOU. 错误说明发生了什么。您必须修复错误或崩溃。如果没有错误编号、错误来源、它试图做什么和参数,那么询问是没有意义的。

错误是预料之中的。用户可以删除或移动文件,例如。

3。您必须阅读文档

在编程时必须打开。它解释了你需要告诉它什么,它才能以某种方式表现出来。只是输入随机命令(这里的许多命令当然是无效的)输入随机参数(就像你一样)不起作用。如果你不读它们,你就不知道它们是什么意思。

4。在无助的

当你被告知答案时,你去查找文档中的所有内容,然后谷歌它。

你不回复一个可悲的"它没有工作"。您可以发布错误编号、错误来源、试图执行的操作和参数。


这是如何解码错误

<解码错误/strong>

-2147220978样式的数字是32位有符号整数,用计算器转换为十六进制。

Windows错误(小数字)和COM HResults(通常,但有例外,以8开头,如0x80040154)在WinError.h中定义,除了8007nnnn,您可以查找它包含的窗口错误号。

作为一般规则Windows错误小于65,535 (0xFFFF)。0x80000001开头的错误是COM (Component Object Model) HResults。以0xC0000001开头的错误为NTStatus结果。以0xD0000001开头的错误也是HResult返回的NTStatus值。

NTStatus错误(通常以C开头,如0xC0000022)在NTStatus.h中定义。

.h文件是最好的源代码,因为它包含错误的符号名称,可以提供诸如错误来源之类的线索。FormatMessage不提供符号名,只提供描述。

你可以通过下载平台SDK获得这些文件(它是gb)http://www.microsoft.com/en-us/download/details.aspx%3Fid%3D8279& sa = U& ei = w2IrULDDLsHFmAWbmIHoBg& ved = 0 cbwqfjaa&美国= AFQjCNHZn9-4f2NnuN9o3UWUsOF3wL7HBQ

如果你只想要这两个文件,我把它们放在我的skydrive上,这样我可以在任何地方引用它们。https://skydrive.live.com/redir?resid=E2F0CE17A268A4FA !121

注意internet错误(12,000 - 12,999)是windows错误,但在wininet.h中指定,上面也有。

在其他。h文件中定义了错误。但99%是以上三种。

HResults和NTStatus代码的结构

HResults中的最高位和NTStatus中的两个最高位设置为error。因此,Hresults在出错时启动8,NTStatus在出错时启动C。接下来的14或15位是保留的,其中一些指定了设备——错误在哪个区域。这是读取十六进制时的第三和第四个数字。EG 0xnn07nnnn - HResult设施代码7是一个正常的Windows错误(从COM程序返回-因此它作为HResult返回)。设备代码在Winerror.h中定义为HResults,在NTStatus.h中定义为NTStatus代码。它们是不同的。

解码0x8003nnnn错误

设施代码为3的HResults表示HResult包含OLE结构化存储错误(0x0到0xff)。这些与Dos错误代码相同。这些似乎不在Windows的头文件中,代码列表在这篇文章的末尾。

解码0x8004nnnn错误

设备代码4的HResults意味着HResult包含OLE错误(0x0到0x1ff),而范围的其余部分(0x200起)是组件特定的错误,因此来自一个组件的20e与来自另一个组件的20e具有不同的含义。

这就是为什么错误的来源对于0x80040200以上的错误是特别重要的。

解码0x8007nnnn错误

设备代码为7的HResults表示HResult包含Windows错误代码。你必须查找Windows的错误代码,而不是HResult。

解码0x80070002。0x表示它是一个十六进制数,8表示错误,前7表示它是windows错误,数字的其余部分,2,是实际的windows错误。

要查找错误,我们需要它的十进制格式。启动计算器(开始-所有程序-附件-计算器),选择"查看菜单-科学",然后选择"查看菜单-十六进制"。输入2。然后查看菜单-十进制。它会显示2.

启动命令提示符(开始-所有程序-附件-命令提示符)并键入

net helpmsg 2

然后显示

The system cannot find the file specified.

或在winerror.h

中查找
//
// MessageId: ERROR_FILE_NOT_FOUND
//
// MessageText:
//
// The system cannot find the file specified.
//
#define ERROR_FILE_NOT_FOUND             2L

解码0x8019nnnn错误

h设施0x19的结果是HTTP错误。16384 (0x4000)下的代码与HTTP错误相同,例如HTTP状态404:请求的URL不存在于服务器上是0x80190194 (0x194 = 404)。代码16,384及以上是BITS特有的。

解码0xDnnnnnnn错误

从0xD开始的HResults是带有NTStatus值的HResult。只需将引线D更改为C并将其视为NTStatus (Hresult = NTStatus或0x10000000)。

Dos错误码(用于0x8003nnnn错误)

Code Message 
01 Invalid function number 
02 File not found 
03 Path not found 
04 Too many open files (no handles left) 
05 Access denied 
06 Invalid handle 
07 Memory control blocks destroyed 
08 Insufficient memory 
09 Invalid memory block address 
0A Invalid environment 
0B Invalid format 
0C Invalid access mode (open mode is invalid) 
0D Invalid data 
0E Reserved 
0F Invalid drive specified 
10 Attempt to remove current directory 
11 Not same device 
12 No more files 
13 Attempt to write on a write-protected diskette 
14 Unknown unit 
15 Drive not ready 
16 Unknown command 
17 CRC error 
18 Bad request structure length 
19 Seek error 
1A Unknown media type 
1B Sector not found 
1C Printer out of paper 
1D Write fault 
1E Read fault 
1F General failure 
20 Sharing violation 
21 Lock violation 
22 Invalid disk change 
23 FCB unavailable 
24 Sharing buffer overflow 
25 Reserved 
26 Unable to complete file operation (DOS 4.x) 
27-31 Reserved 
32 Network request not supported 
33 Remote computer not listening 
34 Duplicate name on network 
35 Network name not found 
36 Network busy 
37 Network device no longer exists 
38 NetBIOS command limit exceeded 
39 Network adapter error 
3A Incorrect network response 
3B Unexpected network error 
3C Incompatible remote adapter 
3D Print queue full 
3E No space for print file 
3F Print file deleted 
40 Network name deleted 
41 Access denied 
42 Network device type incorrect 
43 Network name not found 
44 Network name limit exceeded 
45 NetBIOS session limit exceeded 
46 Temporarily paused 
47 Network request not accepted 
48 Print or disk redirection is paused 
49-4F Reserved 
50 File already exists 
51 Reserved 
52 Cannot make directory entry 
53 Fail on INT 24 
54 Too many redirections 
55 Duplicate redirection 
56 Invalid password 
57 Invalid parameter 
58 Network device fault 
59 Function not supported by network (DOS 4.x) 
5A Required system component not installed (DOS 4.x) 

Facility Codes
NTStatus Facilities  HResults Facilities  
Common status values 0x0 Null 0x0 
Debugger 0x1 Rpc 0x1 
Rpc_runtime 0x2 Dispatch 0x2 
Rpc_stubs 0x3 Storage 0x3 
Io_error_code 0x4 Itf 0x4 
Various drivers 0x5-0xf Win32 0x7 
Ntwin32 0x7 Windows 0x8 
Ntsspi 0x9 Sspi 0x9 
Terminal_server 0xa Security 0x9 
Faciltiy_mui_error_code 0xb Control 0xa 
Usb_error_code 0x10 Cert 0xb 
Hid_error_code 0x11 Internet 0xc 
Firewire_error_code 0x12 Mediaserver 0xd 
Cluster_error_code 0x13 Msmq 0xe 
Acpi_error_code 0x14 Setupapi 0xf 
Sxs_error_code 0x15 Scard 0x10 
Transaction 0x19 Complus 0x11 
Commonlog 0x1a Aaf 0x12 
Video 0x1b Urt 0x13 
Filter_manager 0x1c Acs 0x14 
Monitor 0x1d Dplay 0x15 
Graphics_kernel 0x1e Umi 0x16 
Driver_framework 0x20 Sxs 0x17 
Fve_error_code 0x21 Windows_ce 0x18 
Fwp_error_code 0x22 Http 0x19 
Ndis_error_code 0x23 Usermode_commonlog 0x1a 
Hypervisor 0x35 Usermode_filter_manager 0x1f 
Ipsec 0x36 Backgroundcopy 0x20 
Maximum_value 0x37 Configuration 0x21 
State_management 0x22 
Metadirectory 0x23 
Windowsupdate 0x24 
Directoryservice 0x25 
Graphics 0x26 
Shell 0x27 
Tpm_services 0x28 
Tpm_software 0x29 
Pla 0x30 
Fve 0x31 
Fwp 0x32 
Winrm 0x33 
Ndis 0x34 
Usermode_hypervisor 0x35 
Cmi 0x36 
Windows_defender 0x50