最近在做一個補丁管理功能,其中有一個過程是把補丁從服務器下載下來,然后進行安裝。
發現在Windows Vista及其之后的Windows 7、Windows 8等系統中,微軟的提供了兩種格式的補丁包:.psf和.cab,在Windows XP之前,是會有.exe格式的補丁文件,直接運行就可以進行安裝。我選擇了安裝.cab格式的補丁包,安裝的時候需要執行一個命令,如下:
dism /online /add-package /packagepath:補丁包路徑
用管理員權限運行CMD命令窗口,輸入命令,就可以安裝系統對應的補丁包。
我們需要用VC代碼運行命令,我的程序是32位的,操作系統是64位的,補丁包是64位的,在CMD窗口中執行命令運行的很嗨皮,但是用代碼執行就會報錯:無法使用32位dism為正在運行的64位系統服務。。。
就是說不能用32位的程序執行這個命令為64位系統安裝補丁包。
看到了一個解決方案,將命令卸載腳本里,執行腳本就可以了,所以立即效仿,下面是腳本內容
cd /d C:\Windows\Sysnative
dism /online /add-package /packagepath:補丁包路徑
第一句是為了調用System32中的cmd.exe,就是64位的命令行程序。
system執行腳本,成功運行。
如此應該是使用了64位的cmd.exe執行了命令。
但是在這之前嘗試用CreateProcess打開System32下的cmd.exe,執行命令並沒有成功,有些奇怪的。
