在我創建的Windows應用程序中,我試圖運行一個指向.vbs的批處理文件。它運行vbs腳本,但不會根據需要修改註冊表。但是,如果我手動運行該批處理文件,它將正常運行。有沒有人有任何洞察力,可能是什麼問題?我認爲這是權限,但如果我手動點擊批處理文件或如果我的程序打開它,爲什麼會這樣?無論如何,我已經修改了批處理文件以嘗試以管理員身份運行,但似乎沒有任何聯機工作。CreateProcess執行批處理文件
回答
它說沒有CreateProcess可以運行批處理文件。由於批處理文件不是程序,CreateProcess無法對其執行任何操作。 CMD.exe執行批處理文件。
你必須知道這一點通過測試的返回值,並通過讀取文檔
從幫助
返回值
如果函數成功,返回值是非零。
如果函數失敗,返回值爲零。要獲得擴展的錯誤信息,請調用GetLastError。
而且從幫助
要運行一個批處理文件,則必須啓動命令解釋程序;將lpApplicationName設置爲cmd.exe並將lpCommandLine設置爲批處理文件的名稱。
這是你在做什麼錯誤
1.你有一個程序的bizzare設計。
任何程序都可以提示用戶輸入並寫入註冊表。您正在編寫一個程序,該程序至少有四種不同的編寫註冊表(.NET,WSH,WMI,API)的方法。然後你運行一個有兩種編寫註冊表(WMI和reg.exe)的方式的批處理。然後用兩種方式(WMI,WSH)創建一個vbs文件。
2.您不測試錯誤。
您必須測試錯誤。唯一可以訪問該錯誤的人是YOU。錯誤說明發生了什麼。您必須修復錯誤或崩潰。沒有錯誤號碼,錯誤來源,它試圖做什麼以及參數的問題沒有意義。
錯誤是預期的。例如,用戶刪除或移動文件。
3.您必須閱讀文檔
它,而你的程序是開放的。它解釋了你需要告訴它以某種方式行事。只要輸入隨機命令(這裏有很多 - 當然是無效的)或輸入隨機參數(就像你一樣)不起作用。如果你沒有閱讀他們,你不知道他們的意思。
4.播放無奈
,當你告訴答案,你去和文檔中查找相關的一切行動,然後google一下。
你沒有回覆可悲的「它沒有工作」。您發佈錯誤號,錯誤來源,試圖執行的操作以及參數。
這是怎樣的錯誤解碼
解碼錯誤
-2147220978風格號是32個有符號整數,轉換與計算器爲十六進制。
在WinError.h中定義了Windows錯誤(小數字)和COM HResults(通常但有例外,以0x80040154中的8開頭),除了8007nnnn,您可以在其中查找其包含的Window錯誤編號。
作爲一般規則,Windows錯誤小於65,535(0xFFFF)。從0x80000001開始的錯誤是組件對象模型(COM)HResults。從0xC0000001開始的錯誤是NTStatus結果。起始0xD0000001的錯誤也是在HResult中返回的NTStatus值。
在NTStatus.h中定義了NTStatus錯誤(通常但不總是以0xC0000022中的C開頭)。
.h文件是最好的源代碼,因爲它包含錯誤的符號名稱,可以提供諸如錯誤來源等線索。 FormatMessage不給符號名稱只描述。
可通過下載平臺SDK(它的千兆字節) http://www.microsoft.com/en-us/download/details.aspx%3Fid%3D8279&sa=U&ei=w2IrULDDLsHFmAWbmIHoBg&ved=0CBwQFjAA&usg=AFQjCNHZn9-4f2NnuN9o3UWUsOF3wL7HBQ
獲得這些文件如果你只是想兩個文件我有他們在我的SkyDrive,所以我可以引用它們無論我去哪裏。 https://skydrive.live.com/redir?resid=E2F0CE17A268A4FA!121
注意互聯網錯誤(12,000 - 12,999)是Windows錯誤,但也在上面提供的wininet.h中指定。
在其他.h文件中定義了錯誤。但是99%在上述三個中。 HRESULTS和NTSTATUS代碼
最顯著位的HRESULT,並在NTSTATUS兩個最顯著位
結構上的錯誤設置。因此Hresults在錯誤時啓動8,而NTStatus在錯誤時啓動C.接下來的14或15位被保留,一些指定設備 - 錯誤在哪個區域。當讀取十六進制時,這是第三和第四個數字。 EG 0xnn07nnnn - HResult工具代碼7是一個正常的Windows錯誤(從COM程序返回 - 因此它作爲HResult返回)。在Winerror.h中爲HResults定義設施代碼,在NTStatus代碼中爲NTStatus.h定義設施代碼。他們是不同的。
解碼0x8003nnnn錯誤
HRESULTS與設施代碼3裝置產生HResult包含OLE結構化存儲錯誤(0x0到0xff的)。這些與Dos錯誤代碼相同。這些似乎不在Windows的頭文件中,代碼列表在本文的末尾。
解碼0x8004nnnn錯誤
HRESULTS與設施代碼4表示產生HResult包含OLE錯誤(0x0到到0x1FF),而該範圍的其餘部分(在0x200起)是組分的具體錯誤,從而20E從一種組分將與另一個組件的20e有不同的含義。
這就是爲什麼錯誤的來源對0x80040200以上的錯誤特別重要。
解碼0x8007nnnn錯誤
HRESULTS與設施碼7指的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錯誤
設施0x19的HResults是HTTP錯誤。 16,384(0x4000)以下的代碼與HTTP錯誤相同,例如HTTP狀態404:服務器上不存在請求的URL是0x80190194(0x194 = 404)。代碼16,384和更高版本是特定於BITS的。
解碼0xDnnnnnnn錯誤
HRESULTS開始爲0xD與在其中的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
我試過了,它根本不起作用。它會詢問用戶名,密碼和域名,但不會將這些值寫入註冊表。如果我手動點擊批處理文件,雖然它會詢問用戶名,密碼和域,並且它會寫入註冊表。我一直在竭盡全力,沒有任何工作,它似乎在做一些事情,但它並沒有完成我的程序運行的最後一步。 – limburger 2014-10-29 21:32:14
我確實有錯誤檢查,它沒有提供任何錯誤。我已經改變它來嚴格運行Vbs而不是使用bat文件,現在它只給了我一個帶有E的命令窗口,並且不執行VBS。由於消息中的字符限制,我將不得不將代碼附加到第二條消息。 – limburger 2014-11-04 16:06:32
'code'BOOL結果 LPTSTR cmdname =「C:\\ Windows \\ System32 \\ cmd.exe」; LPTSTR cmdargs =「E:\\ Programs \\ LogonScript \\ AutoLogonEnable.vbs」; LPTSTR cmdargs =「E:\\ Programs \\ LogonScript \\ AutoLogonEnable.vbs」; 如果(LOGINFlag.State ==未選中){ 結果=的CreateProcess(cmdname,cmdargs,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&SI,&pi); WaitForSingleObject的(pi.hProcess,無限); LOGINFlag.State =檢查;'代碼'如果你想讓我給錯誤檢查代碼讓我知道 – limburger 2014-11-04 16:09:00
- 1. 使用createProcess()運行批處理文件()
- 2. 使用CreateProcess運行批處理文件
- 3. 批處理文件執行
- 4. 批處理文件,使另一個批處理文件執行
- 5. 執行批處理文件時出錯
- 6. 批處理文件未從php執行
- 7. 在php中執行批處理文件
- 8. 在前臺執行批處理文件
- 9. 遠程執行批處理文件java
- 10. 非阻塞批處理文件執行
- 11. 窗體執行批處理文件
- 12. 批處理文件未完全執行
- 13. 在c#中執行批處理文件
- 14. 在C#中執行批處理文件#
- 15. 執行多個批處理文件c#
- 16. 執行的Windows批處理文件
- 17. 的MSBuild PSEXEC執行批處理文件
- 18. Windows批處理文件執行日誌
- 19. 批處理文件執行ASP經典
- 20. 執行一個批處理文件
- 21. 執行批處理文件默默
- 22. 批處理文件執行Powershell腳本
- 23. 在批處理文件中執行httprequest
- 24. 從批處理文件中執行.exe
- 25. QT批處理文件未執行。
- 26. 從C#執行批處理文件#
- 27. 執行多個批處理文件後,同時完成批處理文件
- 28. 在單獨的批處理文件中執行sql批處理文件
- 29. 從另一個批處理文件運行批處理文件
- 30. 在批處理文件中運行幾個批處理文件
以及如何的問題,它的標題連接? – 2014-10-29 15:17:33
我通過程序中的CreateProcess運行該批處理文件 – limburger 2014-10-29 15:26:06
CreateProcess將暗示創建的進程的一些上下文:環境塊,工作目錄等。它可能是導致您的問題的那些事情之一。您可能需要真正排除vbs腳本的故障並確定它不工作的原因,這將幫助您找出CreateProcess調用中要更改的內容。 – lordjeb 2014-10-29 15:29:12