DPInst 使用方法
1. Download Site: http://www.microsoft.com/taiwan/whdc/driver/install/DIFxtls.mspx
2. Document Site: http://www.microsoft.com/taiwan/whdc/driver/install/default.mspx
DPInst是包裝在Driver Install Frameworks Tools裡頭的一個安裝工具,這個工具可以直接使用,用來安裝Driver。安裝的Driver必須是要認證過的,如此一來安裝後就可以馬上使用。如果 是沒有認證過的驅動程式,在安裝時會比較麻煩一點,有興趣的人可以參考http://www.programmer-club.com/pc2020v5 /forum/ShowSameTitleN.asp?URL=N&board_pc2020=driver&index=4&id=3078&mode=&type_pc2020=sametitleLevel-2
使用方法相當簡單,只要將DPInst.exe和所要安裝的inf檔放在一起(包括Driver的必要檔案),執行DPInst.exe就會自動幫電腦安 裝,而且在2000及XP上面會自動在”新增移除”裡頭自動加上,方便解除安裝。而Vista上不會在新增移除裡頭加上反安裝資訊,這是因為Vista上 面的裝置管理員,本來就可以直接解除安裝而且刪除檔案。
在Windows 2000及XP上面安裝的過程,只要是管理者權限,安裝過程完全沒有問題,比較麻煩的是在Vista 32/64上面安裝。因為Vista有UAC (User Account Control),以至於會使得DPInst沒辦法在Vista上面順利的安裝,在安裝過程中會出現詢問使用者要不要執行的問題。
網路上對於UAC的討論還不是很多,但有一些方法可以讓使用者只要問一次以何種身分執行,如此就可以解決DPInst不能直接在Vista 64上面安裝的問題。另外DPInst也有Localization版本,因為也不用擔心語系問題,更可以使用XML檔來客制化安裝的過程及畫面。
為了解決Vista 64上的問題,下面這些Code就是會問使用者以什麼身分執行。
SHELLEXECUTEINFOA TempInfo = {0};
TempInfo.cbSize = sizeof(SHELLEXECUTEINFOA);
TempInfo.fMask = 0;
TempInfo.hwnd = NULL;
TempInfo.lpVerb = "runas";
TempInfo.lpFile = "C:TEMPUACTest.exe";
TempInfo.lpParameters = "";
TempInfo.lpDirectory = "C:TEMPUAC";
TempInfo.nShow = SW_NORMAL;
::ShellExecuteExA(&TempInfo);
其中的runas就是這種功能
RUNAS可以參考: http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-cht/library/ServerHelp/0a688988-b5d1-494a-be98-61e3434c5715.mspx?mfr=true
DPInst的參數如下:
Usage: DPInst.exe [/U INF-file][/S | /Q][/LM][/P][/F][/SH][/SA][/A][/PATH Path][
/EL][/L LanguageID][/C][/D][/LogTitle Title][/SW][/? | /h | /help]
/U path to INF file
Uninstall a driver package (INF-file).
/S | /Q Silent (Quiet) mode. Suppresses the Device Installation
Wizard and any dialogs popped-up by the operating system.
/LM Legacy mode. Accepts unsigned driver packages and packages with
missing files. These packages won't install on the latest
version of Windows.
/P Prompt if the driver package to be installed is not better
than the current one.
/F Force install inf the driver package is not better than the
current one.
/SH Scans hardware for matching devices and only copies and installs
those drivers for which a device is present. Only valid for
Plug and Play drivers.
/SA Suppress the Add/Remove Programs entry normally created for
each driver package.
/A Install all or none.
/PATH Path
Search for driver packages under the given path.
/EL Enables all languages not explicitly listed in the XML file.
/L LanguageID
Tries to use the given language in all UI.
Useful for localization tests.
/SE Suppress the EULA.
/C Dump logging output to attached Console (Windows XP and above).
/D Delete driver binaries on uninstall.
/SW Suppresses the Device Installation Wizard, the operating system
might still pop-up user dialogs.
/? | /h | /help
Shows this help.
2008年9月15日 星期一
2008年9月8日 星期一
隱藏win32 console application的console視窗
因為此種方法是通過設置編譯器的鏈結開關來實現,所以讓我們來看一下編譯
器的鏈結開關選項(也就是linker選項).
首先我們來看一下linker的 /subsystem 選項
該選項的語法形式如下:
/SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|
EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|WINDOWSCE}
[,major[.minor]]
這個鏈結選項告訴作業系統如何運行可執行檔
CONSOLE:
win32 字元模式應用程式,此種類型的應用程式在運行的時候會產生一個類似DOS
視窗的控制臺視窗,如果在應用程式的主函數為main()或者wmain(),在默認情況下
該應用程式就是一個控制臺應用程式
Extensible Firmware Interface
和CPU具體架構相關的一個參數選項,並不常用,在這裏暫不詳細介紹.
如果對此有興趣的可以訪問intel主頁來查看相關內容
NATIVE;
設備驅動器選項,如果/DRIVER:WDM選項被設定的話,該鏈結選項(NATIVE)就為默認選項
POSIX:
在windows NT 種運行在POSIX子系統上的應用程式
WINDOWS:
該類型的應用程式不產生console視窗,該類型的應用程式的視窗由用戶自己創建,簡而言之
就是一個標準的Win32 application,其入口位址為WinMain()函數或者wWinMain()函數的位址
如果你在應用程式種定義的主函數為WinMain或者wWinMain,在默認情況下該應用程式就是一個
Win32 Application !
WINDOWSCE:
運行在windows CE上的應用程式
major and minor (optional):
主版本號和次版本號,該選項為可選,該選項為0~65535之間的十進位整數
從上面可以看出如果我們建立一個win32 console application的話,linker的/subsystem選項應該為
CONSOLE,可以在VC開發環境的project->setting->link->project option中看到!
接下來我們再看看應用程式是如何運行的!
我們知道用VC編寫的程式,運行的時候是需要 C\C++運行庫支援的.當我們運行一個C/C++程式的時候
鏈結器會首先尋找應用程式的啟動函數,例如:
如果你建立了一個console程式的話,編譯器得鏈結開關會是以下這種形式
/subsystem:"console" /entry:"mainCRTStartup" (ANSI)
/subsystem:"console" /entry:"wmainCRTStartuup" (UNICODE)
如果你建立了一個win32 application,編譯器得鏈結開關則會是一下形式
/subsystem:"windows" /entry:"WinMain" (ANSI)
/sbusystem:"windows" /entry:"wWinMain" (UINCODE)
上面的兩種形式可以再project->setting->link->project option中看到
上面的subsystem和entry並不需要都設置,如果你只設置了/subsystem:"console"
的話,那麼默認的entry開關在默認情況下應為/entry:"mainCRTStartup"
反之,如果你在應用程式中定義了main函數的話,默認情況下,你的/subsystem開關
應該為/system:"console"
在默認情況下/subsystem 和/entry開關是匹配的,也就是
console對應mainCRTStartup或者wmainCRTStartup
windows對應WinMain或者wWinMain
但是我們也可以通過手動改動的方式使他們不匹配
例如我們可以這樣改動
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 設置入口位址
int main(int argc, char* argv[])
{
MessageBox(NULL, "hello", "Notice", MB_OK);
return 0;
}
在默認情況下鏈結器看到/subsystem下是windows選項的時候,它會自動尋找WinMain或者wWinMain
但我們強制指定入口位址,這樣運行程式的時候默認的console視窗就會隱藏!
上面是在代碼中使用#pragma指令來設置,還有一種就是直接在開發環境的
project->setting->link->project option中手工改動!
原文出處:
http://forum.icst.org.tw/phpbb/viewtopic.php?t=7609
器的鏈結開關選項(也就是linker選項).
首先我們來看一下linker的 /subsystem 選項
該選項的語法形式如下:
/SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|
EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|WINDOWSCE}
[,major[.minor]]
這個鏈結選項告訴作業系統如何運行可執行檔
CONSOLE:
win32 字元模式應用程式,此種類型的應用程式在運行的時候會產生一個類似DOS
視窗的控制臺視窗,如果在應用程式的主函數為main()或者wmain(),在默認情況下
該應用程式就是一個控制臺應用程式
Extensible Firmware Interface
和CPU具體架構相關的一個參數選項,並不常用,在這裏暫不詳細介紹.
如果對此有興趣的可以訪問intel主頁來查看相關內容
NATIVE;
設備驅動器選項,如果/DRIVER:WDM選項被設定的話,該鏈結選項(NATIVE)就為默認選項
POSIX:
在windows NT 種運行在POSIX子系統上的應用程式
WINDOWS:
該類型的應用程式不產生console視窗,該類型的應用程式的視窗由用戶自己創建,簡而言之
就是一個標準的Win32 application,其入口位址為WinMain()函數或者wWinMain()函數的位址
如果你在應用程式種定義的主函數為WinMain或者wWinMain,在默認情況下該應用程式就是一個
Win32 Application !
WINDOWSCE:
運行在windows CE上的應用程式
major and minor (optional):
主版本號和次版本號,該選項為可選,該選項為0~65535之間的十進位整數
從上面可以看出如果我們建立一個win32 console application的話,linker的/subsystem選項應該為
CONSOLE,可以在VC開發環境的project->setting->link->project option中看到!
接下來我們再看看應用程式是如何運行的!
我們知道用VC編寫的程式,運行的時候是需要 C\C++運行庫支援的.當我們運行一個C/C++程式的時候
鏈結器會首先尋找應用程式的啟動函數,例如:
如果你建立了一個console程式的話,編譯器得鏈結開關會是以下這種形式
/subsystem:"console" /entry:"mainCRTStartup" (ANSI)
/subsystem:"console" /entry:"wmainCRTStartuup" (UNICODE)
如果你建立了一個win32 application,編譯器得鏈結開關則會是一下形式
/subsystem:"windows" /entry:"WinMain" (ANSI)
/sbusystem:"windows" /entry:"wWinMain" (UINCODE)
上面的兩種形式可以再project->setting->link->project option中看到
上面的subsystem和entry並不需要都設置,如果你只設置了/subsystem:"console"
的話,那麼默認的entry開關在默認情況下應為/entry:"mainCRTStartup"
反之,如果你在應用程式中定義了main函數的話,默認情況下,你的/subsystem開關
應該為/system:"console"
在默認情況下/subsystem 和/entry開關是匹配的,也就是
console對應mainCRTStartup或者wmainCRTStartup
windows對應WinMain或者wWinMain
但是我們也可以通過手動改動的方式使他們不匹配
例如我們可以這樣改動
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 設置入口位址
int main(int argc, char* argv[])
{
MessageBox(NULL, "hello", "Notice", MB_OK);
return 0;
}
在默認情況下鏈結器看到/subsystem下是windows選項的時候,它會自動尋找WinMain或者wWinMain
但我們強制指定入口位址,這樣運行程式的時候默認的console視窗就會隱藏!
上面是在代碼中使用#pragma指令來設置,還有一種就是直接在開發環境的
project->setting->link->project option中手工改動!
原文出處:
http://forum.icst.org.tw/phpbb/viewtopic.php?t=7609
2008年9月5日 星期五
INNO Manual
Inno Setup 是一個免費的安裝製作軟體,小巧、簡便、精美是其最大特點,支持pascal腳本,能快速製作出標準Windows2000風格的安裝界面,足以完成一般安裝任務。該軟體用Delphi寫成,其官方網站同時也提供源程式免費下載。它雖不能與Installshield這類恐龍級的安裝製作軟體相比,但也當之無愧算是后起之秀。
http://www.52z.com/soft/14374.html 這裡下載最新版的 inno setup
如何使用︰
文檔約定
創建安裝程式
創建腳本
段內參數
一些常量
公共參數
安裝腳本段
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
其它問題︰
其它注意事項
在命令行執行編譯器
安裝命令行參數
文檔約定
"Windows 95/NT 4+"
這是 Windows 95, 98, NT 4.0, 2000 以及更高版本的簡稱。
"Windows 98/NT 4+"
這是 Windows 98, NT 4.0, 2000 以及更高版本的簡稱。
"Windows NT"
無論何時提及 Windows NT,除非有其他說明,他總是包括 Windows 2000(亦即 NT 5.0)。
等寬字體
當你看見文檔裡的等寬字體,說明他是腳本文件的引用。
創建安裝程式
安裝程式是以腳本(script)的模式來創建的。(不要一看見“腳本”這個術語就害怕,你只需要花上幾分鐘的時間就可以掌握它的要領﹗)
該腳本文件的擴展名是“.iss”(意思是 Inno Setup Script)。腳本文件控制了安裝程式的每一個外觀界面。它指定了哪些文件要被複製及其位置,創建什麼應用程式圖標和為它們命名等等。
腳本文件通常可以用安裝編譯程式內建的編輯器來創建和編輯,完成以後寫入腳本文件,下一步也是最後一步是在安裝編譯器的菜單裡選擇“編譯 ”(Compile)。創建完成以後該干什麼呢?準備營運這個基于該腳本的安裝程式吧﹗默認情況下,這個文件被創建在腳本文件所在文件夾的 “OUTPUT”子文件夾下。
要了解腳本文件是如何工作的,營運安裝編譯器,單擊“文件\打開”選擇一個位于 Inno Setup 文件夾的 Samples 子文件夾下的示例腳本文件。(用這些示例文件作為你自己的腳本文件的模板可能示非常有用處的。)
參見
創建腳本
創建腳本
一個 Inno Setup 腳本是一個簡單的 ASCII 文本文件。它的格式非常類似于 .INI 文件,如果你有這方面的經驗你就會發現學習起來有多么的容易。
就象下面的示例所顯示的,腳本文件包括“段”(sections)和“項”(entries)。段名的兩邊始終有一對中括號“[]”,在 [Setup] 段中的每一項包括一個關鍵字和他的值,關鍵字和值用等于號“=”連接在一起。下面的這個示例說明了腳本文件是如何被組織的︰
[在這裡添加段名,例如 Setup]
這是一個關鍵字=這是一個值
這是其它的關鍵字=這是其它的值
[在這裡添加段名,例如 Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
你也可以在你的腳本文件中加上註釋(這些註釋將會被安裝編譯器忽略),方法是在每一行註釋的行首加上一個分號“;”,例如︰
; 這是一行註釋,我可以在這裡寫上提醒我的內容...
參見
段內參數
一些常量
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
段內參數
腳本文件中的所有的段,除了[Setup],都是以行位單位,每行分為若干個參數。下面是一個 [Files] 段的示例︰
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.HLP"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
每一個參數都有一個名稱,后面緊跟一個冒號,然後是它的值。除非有其它的說明,參數是可選的,如果參數沒有指定則取它們的默認值。如果一行內有多個參數則用分號將其分開 (還可以加一個空格符),他們可以按任何順序排列出來。
參數的值多數情況下是用引號擴起來("),但使用引號也是可選的。然而如果這個參數的值裡面的前導符號或者后綴符號是空格的話就必須加上引號了。另外需要說明的是使用內嵌的分號和引號,要插入一個引號則使用兩個連續的引號來代替。例如,下面的示例︰
"This "" contains "" embedded "" quotes"
""""
安裝程式編譯器將會視為︰
This " contains " embedded " quotes
"
一些常量
多數的腳本項都可以在它們的內部嵌入“常量(constants)”,它們總是被一對大括號({ })擴起來的。當安裝程式被啟動的時候,這些常量將被轉換成其真實的值,這倚賴于用戶的選擇和系統配置,例如,{win} 這個常量在絕大多數的系統當中將被轉換成“C:\WINDOWS”。
字符“{”被視為一個常量的起始標記,如果你想獲得的是它的真實字符,那么你必須使用兩個連續的“{”字符。
如果一個常量的后面緊跟著一個反斜杠,而此時這個常量被轉換成其真實值的結尾也是一個反斜杠時,Inno Setup 會自動的刪除一個反斜杠,這樣處理的明顯的好處是如果這個常量指向了“C:\”,{常量名}\file 就會被正確的轉換成“C:\file”而不是“C:\\file”。然而如果你想要防止這種事情的發生,那么就要將反斜杠用大括號括起來,象這樣︰ {app}{\}.
下面所列出的是目前已經被支持的常量。
目錄常量
{app}
應用程式目錄,這是用戶在安裝向導的選擇安裝目錄頁裡面所選擇的。
例如︰如果你使用了 {app}\MYPROG.EXE 作為一項並且用戶選擇了“C:\MYPROG”作為應用程式的目錄,那么安裝程式就會將它轉換成“C:\MYPROG\MYPROG.EXE”。
{win}
系統的 Windows 目錄。 例如︰如果你使用了 {win}\MYPROG.INI 作為一項並且系統的 Windows 目錄是“C:\WINDOWS”,那么安裝程式就會將它轉換成“C:\WINDOWS\MYPROG.INI”。
{sys}
系統的 Windows 系統(System)目錄(在 Windows NT/2000 下是 System32)。
例如︰如果你使用了 {sys}\CTL3D32.DLL 作為一項並且系統的 Windows 系統目錄是“C:\WINDOWS\SYSTEM”,那么安裝程式就會將它轉換成“C:\WINDOWS\SYSTEM\CTL3D32.DLL”。
{src}
這個文件夾指向安裝程式所在的位置。
例如︰如果你使用了 {src}\MYPROG.EXE 作為一項並且用戶是從“S:\ ”安裝的,那么安裝程式就會將它轉換成“S:\MYPROG.EXE”。
{sd}
系統驅動器,它是指 Windows 被安裝到的那個驅動器,典型的是“C:”,對于 Windows NT/2000,這個常量同系統的環境變量“SystemDrive”是等效的。
{pf}
程式文件夾(Program Files),這個路徑是系統的 Program Files 目錄,典型的是“C:\Program Files”。
{cf}
公共文件夾(Common Files),這個路徑是系統的 Common Files 文件夾,典型的是“C:\Program Files\Common Files”。
{tmp}
臨時目錄,這個目錄並不是用戶的 TEMP 環境變量指向的目錄,而是安裝程式在啟動時在用戶的臨時目錄下建立的一個子目錄(它有一個類似于“
C:\WINDOWS\TEMP\IS-xxxxx.tmp”這樣的名字),在安裝程式退出時所有的文件和子目錄將會被刪除。對于在 [Run] 段裡面要被執行且在安裝以後又不需要的程式文件來說這個功能是非常有用的。
{fonts}
字體目錄,在 Windows 95/NT 4+ 下有一個專門為字體設立的目錄(通常這個目錄在 Windows 目錄下且被命名為“FONTS”),這個常量就指向這個目錄。對于 Windows NT 3.51,這個常量是和 {sys} 等效的,因為當時還沒有字體目錄。
{dao}
DAO 目錄,當安裝程式營運在 Windows 95/NT 4+ 上時,它被等效為 {
cf}\Microsoft Shared\DAO,當營運于 Windows NT 3.51 時,它被等效為 {
win}\MSAPPS\DAO.
外殼(Shell)文件夾常量
Inno Setup 還支持另外一套目錄常量,這就是涉及到的外殼(shell)文件夾常量,它們具有和其它的目錄常量相同的使用方法。然而,如果在腳本的 [Setup] 段裡面放入了 MinVersion=4,3.51 這一行來表示允許支持 NT 3.51,那么將只有 {group} 這個外殼文件夾常量能被使用,並簽只能用在 [Icons] 段。
下面的包含了“user”的常量涉及到當前登陸的用戶私人文檔(profile),而帶有“
common”的常量會涉及到全部用戶(All Users)的私人文檔(profile)。當安裝程式營運在 Windows NT/2000 作業系統下並且用戶不具有管理員的權限時,所有的帶有“common”的常量會強迫同帶有“user”的常量等效。
* 標記表示帶有“common”的常量在 Windows 9x 作業系統下同帶有“user”的常量等效。
{group}
程式組的路徑,取決于用戶在安裝程式向導的“選擇程式組”頁的選擇。對于 Windows NT,這個文件夾始終被建立在所有用戶的私人文檔(All Users profile),除非用戶正在安裝的這個應用程式不具有管理員的權限,那么在這種情況下它將被建立在用戶的私人文檔中(profile).
{sendto}
當前用戶的“發送”的路徑。(沒有公共的“發送”文件夾。)
{userappdata} & {commonappdata}
應用程式數據(Application Data)文件夾的路徑。
{userdesktop} & {commondesktop} *
桌面文件夾的路徑,推薦桌面快捷模式使用 {userdesktop}.
{userdocs} & {commondocs}
“我的文檔”文件夾的路徑(或者對于 NT 4.0,是指私人文件夾).
{userfavorites} & {commonfavorites}
“收藏夾”的路徑,這個常量的使用方法是需要 MinVersion 的設置至少為“4.1, 4”,目前只有 Windows 2000 支持 {commonfavorites},如果使用的是在這之前的版本的 Windows,那么它將會被轉換成和{userfavorites} 相同的目錄。
{userprograms} & {commonprograms} *
在開始菜單裡面的程式文件夾的路徑。
{userstartmenu} & {commonstartmenu} *
開始菜單的定級路徑。
{userstartup} & {commonstartup} *
開始菜單裡面的啟動文件夾的路徑。
{usertemplates} & {commontemplates}
模板(Templates)文件夾的路徑,目前只有 Windows 2000 支持 {
commontemplates},如果使用的是在這之前的版本的 Windows ,它將會被轉換成和 {usertemplates} 相同的目錄。
其他的常量
{\}
一個反斜杠字符,請參見本頁前面提到的關於常量 {\} 和單字符 \ 在使用上有何不同的說明。
{%NAME}
內嵌一個環境變量,這個 NAME 是要使用的環境變量的名字。如果在用戶的系統當中指定的環境變量不存在,這個常量就會被一個空的字元串所替代。
{computername}
安裝程式正在營運的計算機的名稱(就是“GetComputerName”函數的返回值)。
{groupname}
用戶在安裝程式向導的選擇程式組頁選擇的程式組的名稱,這個是不同于 {group} 的,它不包括路徑。
{hwnd}
(專門用途)傳送安裝程式背景窗口的窗口句柄。
{reg:HKxx\SubkeyName,ValueName|DefaultValue}
內嵌一個註冊表值。
HKxx 指定根鍵(root key),參見 [Registry] 段 文檔所列出的根鍵。
SubkeyName 指定要讀取的子鍵的名稱。
ValueName 指定要讀取的值的名稱,要讀取一個鍵的默認值就讓 ValueName 為空。
DefaultValue 如果指定的註冊表值不存在或者它不是一個字元串類型(REG_SZ 或者 REG_EXPAND_SZ),則嵌入這個值。
如果你希望包括一個逗號,豎線(字符“|”)或大括號閉弧“}”在常量裡面,你必須透過“%-編碼” 形式用“%”后緊跟一個兩位的16進製代碼轉譯后替換原來的字符,一個逗號是“%2c”,一個豎線符是“%7c”,一個大括號閉弧是“%7d”。
DefaultValue 可以包括常量,然而,如上所訴內嵌的常量的大括號的閉弧
(“}”) 必須被改成“%7d”才可以。
{srcexe}
安裝程式的文件名全稱(包括全程路徑和文件名),例如“C:\SETUP.EXE”。
{username}
營運安裝程式的用戶的名稱(函數 GetUserName 的返回值)。
公共參數
有倆個可選的參數可以在所有的段裡面的任何項中使用,它們是︰
MinVersion
說明︰
該項處理所需的分別最低的 Windows 版本和 Windows NT 版本. 如果將某個版本號指定為 0 那么在該平台上就再也不會處理這項了,版本創建編號(Build numbers)和(或)服務包級別(Service pack levels)也可以被包括在版本號當中。這個參數將會覆蓋位于 [Setup] 段當中的 MinVersion 關鍵字。
示例︰
MinVersion: 4.0,4.0
OnlyBelowVersion
說明︰
基本上是和 MinVersion 相反,該項所指定的最低的 Windows 版本 和 Windows NT
版本將不會被處理,例如︰如果你指定了 4.1,5.0 並且用戶營運在 Windows 95 或 NT 4.0 下,那么該項將會被處理,但是如果用戶營運在 Windows 98 (報告的版本訊息是 4.1)或 Windows 2000 (報告的版本訊息是 NT 5.0),則該項就不會被處理。使用“0”表示該版本號上限的限制。版本創建編號(Build numbers)和(或)服務包級別(Service pack levels) 也可以包括在版本號當中。這個參數將會覆蓋位于 [Setup] 段當中的 OnlyBelowVersion 關鍵字。
示例︰
OnlyBelowVersion: 4.1,5.0
其它注意事項
安裝程式是按照段內的排列順序來處理所有的項的,[UninstallRun] 段是個例外,卸載時處理所有項的順序是與安裝程式相反的。
在這個示例中︰
[INI]
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Flags: uninsdeletesectionifempty
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"; Flags: uninsdeleteentry
安裝程式首先記錄下第一項的數據 uninsdeletesectionifempty 標記到卸載記錄中。創建第二項的鍵,然後記錄下 uninsdeleteentry 標記的數據到卸載記錄中,當程式被卸載時,卸載程式將首先處理 uninsdeleteentry 標記,刪除該項,然後才是 uninsdeletesectionifempty 標記。
如果安裝程式在用戶的系統中檢測到一個 Windows 共享版本,Windows 系統目錄是寫保護的,{sys} 目錄常量將會被轉變為用戶的 Windows 目錄替代系統目錄。
在命令行執行編譯器
腳本文件也可以在命令行被安裝編譯器編譯。命令行的使用方法如下︰
compiler /cc <腳本文件>
示例︰
compil16 /cc c:\isetup\sample16\sample16.iss
compil32 /cc "c:\isetup\sample32\my script.iss"
在上面列出的例子中,帶有空格的文件名必須用引號括起來。
在命令行營運安裝編譯器不支持正常的進程顯示或任何錯誤消息。如果編譯成功安裝編譯器將會返回一個退出代碼 0,如果是 1 則表示有無效的命令行參數, 2 則表明編譯失敗。
安裝命令行參數
安裝程式本身接受三個不同的可選的命令行參數,這些參數能被用于系統管理員和其他程式調用安裝程式。
/SP-
在安裝程式開始時禁止“即將安裝 ... ,繼續嗎?”的提示,當然,它將使 [Setup] 段的 DisableStartupPrompt 關鍵字設置為 yes 無效
/DIR="x:\dirname"
替換在“選擇目標文件夾”向導頁顯示的默認的目錄名,必需要指定一個全程路徑名。如果 [Setup] 段的 DisableDirPage 關鍵字被設置為 yes, 那么該命令行參數將被忽略。
/GROUP="group name"
替換在“選擇程式組”向導頁顯示的默認的程式組名,如果 [Setup] 段的 DisableProgramGroupPage 關鍵字被設置為 yes, 那么該命令行參數將被忽略。
安裝腳本段
安裝腳本段
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
其它問題︰
其它注意事項
在命令行執行編譯器
安裝命令行參數
[Setup] 段
這個段包括了安裝和卸載程式所使用的全局設置,並且有些關鍵字在你建立的安裝程式中是必須要用到的。這個是 [Setup] 段的一個示例︰
[Setup]
AppName=My Program
AppVerName=My Program version 1.4
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
下面的這些關鍵字可以被放進 [Setup] 段中去︰
(粗體字 表示是必需的)
編譯器相關
CompressLevel
DiskClusterSize
DiskSize
DiskSpanning
DontMergeDuplicateFilesOutputBaseFilename
OutputDir
ReserveBytes
SourceDir
UseSetupLdr
安裝程式相關
功能關鍵字: 這些關鍵字影響到安裝程式的操作,或是保存起來以備將來卸載時所用到。
AdminPrivilegesRequired
AllowNoIcons
AllowRootDirectory
AlwaysCreateUninstallIcon
AlwaysRestart
AlwaysUsePersonalGroup
AppName
AppId
AppMutex
AppPublisher
AppPublisherURL
AppSupportURL
AppUpdatesURL
AppVersion
AppVerName
ChangesAssociations
CreateAppDir
CreateUninstallRegKey
DefaultDirName
DefaultGroupName
DirExistsWarning
DisableAppendDir
DisableDirPage
DisableFinishedPage
DisableProgramGroupPage
DisableStartupPrompt
EnableDirDoesntExistWarning
ExtraDiskSpaceRequired
InfoAfterFile
InfoBeforeFile
LicenseFile
MessagesFile
MinVersion
OnlyBelowVersion
Password
Uninstallable
UninstallDisplayIcon
UninstallDisplayName
UninstallFilesDir
UninstallIconName
UninstallLogMode
UpdateUninstallAppName
UsePreviousAppDir
UsePreviousGroup
外觀界面關鍵字︰這些關鍵字決定了安裝程式的外觀樣式。
AppCopyright
BackColor
BackColor2
BackColorDirection
BackSolid
WindowShowCaption
WindowStartMaximized
WindowResizable
WindowVisible
WizardImageBackColor
WizardImageFile
廢棄的
Bits
DisableDirExistsWarning
OverwriteUninstRegEntries
[Dirs] 段
這個段是可選的,而且通常對于大多數簡單的應用程式來書不是必需的。這個段是用來創建除用戶選擇的應用程式目錄以外的其它的附加的目錄,它是被自動創建的。這個段所創建的子目錄是可以脫離主應用程式而共同使用的目錄。當然在 [Files] 段裡面的文件被複製到某個目錄之前你並不一定要創建它,然而在卸載程式的時候在 [Dirs] 和 [UninstallDelete] 段裡面沒有指定的目錄就不會被刪除。
這是一個 [Dirs] 段的示例︰
[Dirs]
Name: "{app}\data"
Name: "{app}\bin"
上面的示例演示了在安裝程式的應用程式目錄被創建之后,在應用程式的下面建立兩個子目錄。
下面列出了支持的參數︰
Name (必需的)
說明︰
要被建立的目錄的名稱,通常它以一個目錄常數開始。
示例︰
Name: "{app}\MyDir"
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
deleteafterinstall
告訴安裝程式象平常一樣建立目錄,但是當安裝程式結束(或被中止)之后這個目錄是空的情況下將這個目錄刪除。如果釋放腳本的 [Run] 段所執行的程式所需要的臨時的數據時這個選項是很有用的。
uninsalwaysuninstall
告訴卸載程式試圖刪除這個目錄而不管它是不是空的。通常卸載程式只會嘗試刪除在安裝之前不存在的目錄。
uninsneveruninstall
告訴卸載程式不要去刪除這個目錄。在默認情況下,在 [Dirs] 段裡面指定的目錄如果是空的卸載程式就會嘗試將其刪除。
示例︰
Flags: uninsneveruninstall
公共參數
[Files] 段
這個段是可選的,但對于大多數安裝程式來說是必不可少的。在這裡定義了安裝程式需要複製到用戶的系統當中的全部文件。
在安裝期間,卸載程式和數據被自動的複製到應用程式的目錄當中去,因此你不必手工的將它們添加到 [Files] 段。
這是一個 [Files] 段的示例︰
[Files]
Source: "CTL3DV2.DLL"; DestDir: "{sys}"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.HLP"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
下面列出了支持的參數︰
Source (必需的)
說明︰
“源文件”的名稱,如果沒有提供全程路徑時編譯器會根據安裝程式的源目錄的路徑預先設定號路徑。
允許通配符,根據通配符可以在一項裡面簡單的指定一組文件。當使用了通配符的時候,所有匹配的文件使用相同的可選項。
當標記(flag) external 被指定的時候,Source 必須是一個在發布介質或用戶的系統中已經存在的文件(或帶有通配符)的全程路徑。(例如“{src}\license.ini”).
示例︰
Source: "MYPROG.EXE"
DestDir (必需的)
說明︰
這個是文件將要被安裝到用戶的系統當中去的目錄。它幾乎總是以一個目錄常量開始的。如果指定的路徑不存在于用戶的系統中,它將會被自動的創建。
示例︰
DestDir: "{app}"
DestName
說明︰
這個常數為將要安裝到用戶的系統中的文件指定一個新的名字。在默認的情況下,安裝程式使用的是同 Source 參數一樣的文件名,因此在多數情況下不需要指定該參數。
示例︰
DestName: "MYPROG2.EXE"
CopyMode
默認︰
normal
說明︰
“複製模式”,指定文件複製的規則,必須是下列規則之一。
normal
這是最常使用的選項。如果文件已經存在于用戶的系統當中並且比要複製的文件的版本更新時(由文件的版本訊息決定),安裝程式將會向用戶提出詢問是否要替換掉已經存在的文件。如果已經存在的文件不包含文件的版本訊息,它將會被覆蓋而不會向用戶詢問。
參見這個標題下面的注意中關於版本檢查的重要說明。
onlyifdoesntexist
只有當用戶的系統中的文件不存在時才複製文件。
alwaysoverwrite
總是覆蓋已經存在的文件,甚至如果已經存在的文件比被安裝的文件的版本更新的情況下也是如此。對于共享的系統文件永遠也不要這樣做﹗
alwaysskipifsameorolder
類似于 normal, 不同之處是如果遇到已經存在的文件不會向用戶提出詢問。當這個模式被使用時,更新的一經存在的文件時從來不會被替換的。
示例︰
CopyMode: normal
Attribs
說明︰
為文件指定附加的“屬性”,它可以包括一個或多個屬性,它們是︰readonly, hidden, system. 如果沒有指定這個參數,安裝程式不會給文件指派任何特殊的屬性。
示例︰
Attribs: hidden system
FontInstall
說明︰
告訴安裝程式需要被安裝的文件是一個字體文件,該值是被保存到註冊表或 WIN.INI 文件中的字體名稱,這個名稱必須嚴格地和在資源管理器中雙擊字體文件看到的名稱相對應。注意,安裝程式會自動的在字體名稱的末尾加上“(TrueType)”。
如果這個字體文件不是一個 TrueType 字體,你必須在 Flags 參數中指定 fontisnttruetype 標記。
建議在安裝字體到 {fonts} 目錄的時候使用複製模式參數 onlyifdoesntexist 和標記(flag)參數 uninsneveruninstall.
示例︰
Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
comparetimestampalso
(專門用途)如果要被複製到用戶系統的文件已經存在于用戶的系統當中並且它們具有相同的版本訊息,告訴安裝程式進行時間戳(文件的日期時間屬性)的比較。在正常情況下安裝程式不會覆蓋已經存在的文件,但是當使用了這個標記的時候,如果已存在的文件的時間戳比它的版本訊息還要舊,安裝程式在安裝文件時就會覆蓋它。當複製模式不是 normal 或 alwaysskipifsameorolder 這兩者之一時該標記不起作用。
confirmoverwrite
當文件已經存在每個文件在複製之前始終向用戶提出詢問。
deleteafterinstall
告訴安裝程式象平常一樣複製文件,但是當安裝程式結束(或被中止)之后將這個文件刪除。如果釋放腳本的 [Run] 段所執行的程式所需要的臨時的數據時這個選項是很有用的。
此標記不能和下列標記在一起組合使用︰ isreadme, regserver, regtypelib, restartreplace, sharedfile, uninsneveruninstall.
external
此標記告訴 Inno Setup 不要將由 Source 參數指定的文件編譯進安裝程式文件中,在複製文件的時候由發布介質或用戶的系統中已經存在文件代替。要獲得更多詳細的訊息請參見 Source 參數的說明。
fontisnttruetype
如果 FontInstall 參數指定的是一個 非 TrueType 字體則使用此標記。
isreadme
該文件是“自述(README)”文件,安裝程式中只有一個文件能夠使用此參數。當有一個文件使用了這個參數時,用戶將被詢問是否願意在安裝程式結束時查看自述文件,如果選擇了是,安裝程式將會根據文件的類型用默認的程式打開這個文件,基于這個原因,自述文件應該具有象 .txt, .wri 或 .doc. 這樣的擴展名。
注意如果安裝程式要重新啟動用戶的計算機(比如安裝了一個帶有 restartreplace 參數的文件或在 [Setup] 段中的 AlwaysRestart
關鍵字的值為 yes),安裝程式就不會向用戶詢問是否要查看自述文件。
overwritereadonly
始終覆蓋一個只讀 (read-only) 文件,如果沒有這個參數,當一個已存在的只讀文件要被覆蓋時安裝程式將會詢問用戶。
regserver
註冊 OLE 伺服器 (或稱作 ActiveX 控件)。如果設置了此標記,安裝程式將查找並執行 DLL/OCX 的 DllRegisterServer 輸出,卸載程式調用 DllUnregisterServer. 當結合 sharedfile 標記一起使用,只有參照技術器的值歸零時 DLL/OCX 才可能百取消登記 (unregistered).
要獲得更多的詳細訊息請參見此標題最後的 注意。
regtypelib
註冊類型庫 (.tlb). 卸載程式將會取消註冊類型庫 (除非指定了 uninsneveruninstall 標記). 就像 regserver 標記那樣,如果結合 sharedfile 標記一起使用,這個文件只有參照計數器的值歸零時才可能被卸載。
要獲得更多的詳細訊息請參見此標題最後的 注意。
restartreplace
此標記通常用于替換系統核心文件。如果文件已經預先存在並發現它已經被鎖定結果導致安裝程式無法替換該文件,安裝程式就會註冊此文件(對于 Windows 和 Windows NT 分別使用 WININIT.INI 和函數 MoveFileEx)在下次啟動系統時被替換。當遇到這種情況,在安裝過程結束時用戶將被提示重新啟動計算機。
要保持 Windows95/98 和 3.1 的兼容性,使用了此標記的項不應該使用長文件名,只能支持“8.3”格式的文件名。(Windows NT 和 2000 則沒有此限制。)
重要提示︰在 Windows NT/2000 下只有當用戶具有管理員權限時使用 restartreplace 標記才可以成功的替換使用中的文件。如果用戶沒有管理員權限,將會顯示如下的訊息︰“RestartReplace failed: MoveFileEx failed; code 5.”,因此,當使用 restartreplace 標記時強烈建議讓你的安裝程式需要管理員權限,在 [Setup] 段裡面設置 "AdminPrivilegesRequired=1"。
sharedfile
(僅 Windows 95/NT 4+) 使用 Windows 的共享文件計數功能 (位于註冊表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \SharedDLLs). 這樣會使應用程式之間能夠共享一個文件,不用擔心在不注意的情況下會刪除文件。在每次安裝共享文件的時候,與這個文件相對應的“參照計數器”的值就會加一,而每次應用程式被卸載的時候,參照計數器的值就會減一,如果參照計數器的值歸零的時候,該共享文件就會被刪除(在用戶確認的情況下)。
絕大多數被安裝到 Windows 系統目錄下的文件都應當使用這個標記,包括 .OCX 和 .DPL (Delphi 3 package)文件。不使用這個標記的僅有的一個例外是 MFC DLLs. 作為替代,應該在複製模式中使用 onlyifdoesntexist ,並結合 uninsneveruninstall 標記,或者是如果安裝單獨發布的 MFC DLL 的最近的版本,則使用複製模式 alwaysskipifsameorolder ,並結合使用標記 uninsneveruninstall 和 restartreplace.
當安裝程式被營運在一個 NT 3.51 系統時,被安裝的帶有此標記的文件就再也不會被刪除了。
skipifsourcedoesntexist
只有當 external 標記也使用了的時候這個標記才會有用。它會告訴安裝程式如果源文件不存在的話則無任何提示的(靜靜的)跳過該項,如果沒有使用這個標記則會顯示一個錯誤消息。
uninsneveruninstall
從來不會卸載這個文件。此標記應當被保守地使用,而且通常它是和複製模式 onlyifdoesntexist 在一起結合使用。意思是用于安裝一個特別公共的共享文件,就像 CTL3DV2.DLL 或者一個 MFC DLL, 你不應該用卸載程式去刪除這個文件的原因是以後其它的應用程式也要使用到它。
示例︰
Flags: isreadme
公共參數
注意
如果安裝程式正在安裝一個已經存在于用戶的系統當中的 16 位的 DLL 或者 EXE 文件,兩個文件的版本訊息是不會相比較的,已存在的文件將始終被覆蓋(除非當複製模式的參數是 onlyifdoesntexist),這是由一個 Windows 的限制決定的,32 位的程式就像 Inno Setup 只能讀取 32 位可執行文件的版本訊息。
在安裝程式的最後一步安裝程式會註冊所有的帶有 regserver 或 regtypelib 標記的文件。然而,如果 [Setup] 段關鍵字 AlwaysRestart 的值是 yes, 或如果有文件帶有 restartreplace 標記,全部的文件將會在下次啟動的時候註冊(在 Windows 註冊表的 RunOnce 創建一項)。
當帶有 .HLP 擴展名(Windows 的幫助文件)的文件被卸載的時候,其對應的 .GID 和 .FTS 文件同樣會被自動刪除。
[Icons] 段
這個段是可選的,但對于大多數安裝程式來說是必不可少的。它定義了所有的安裝程式要在用戶系統中創建的程式管理器/開始菜單的圖標。它也能被用來在其它的位置創建應用程式圖標(快捷模式),比如就像桌面。
卸載圖標是由安裝程式內部創建的,這樣一來你就不需要在 [Icons] 段裡面手工的添加它。默認情況下,安裝程式營運在 Windows 95/NT 4+ 的時候是不創建卸載圖標的 除了安裝程式營運于 Windows NT 3.51 的時候。 要強製創建一個卸載圖標,請使用 [Setup] 段裡面的 AlwaysCreateUninstallIcon 關鍵字。
段的一個示例︰
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}"
下面列出了支持的參數︰
Name (必需的)
說明︰
要創建的應用程式圖標的名稱和位置。此參數可以使用任何任何“外殼文件夾常量”和“目錄常量”。
注意︰ 記住 Windows 95/NT 4+ 的應用程式圖標是作為文件直接存儲的,這樣一來普通文件所不允許使用的字符都不能用來作為應用程式圖標的名稱。
示例︰
Name: "{group}\My Program"
Name: "{group}\Subfolder\My Program"
Name: "{userdesktop}\My Program"
Name: "{commonprograms}\My Program"
Filename (必需的)
說明︰
應用程式圖標的命令行文件名,它通常以一個目錄常量開始。
示例︰
Filename: "{app}\MYPROG.EXE"
Parameters
說明︰
應用程式圖標的可選的命令行參數,可以包括常量,在 Windows 95/NT 4+ 下營運時才可以包括引號。
示例︰
Parameters: "/play filename.mid"
WorkingDir
說明︰
應用程式圖標的工作目錄,應用程式啟動的那個目錄,如果沒有指定該參數或該參數是空的,Windows 將使用一個默認的路徑,它隨著 Windows 的版本的不同而改變。這個參數可以包括常量。
示例︰
WorkingDir: "{app}"
Comment
說明︰
指定快捷模式的“註釋”(或“描述”)欄的內容,它決定了在 Windows 2000 下的彈出訊息,早期的 Windows 版本忽略這個註釋。
示例︰
Comment: "This is my program"
IconFilename
說明︰
要被顯示的一個自定義的應用程式圖標(位于用戶的系統中)的文件名。它可以是一個包含圖標的可執行文件映像 (.exe, .dll) 或一個 .ico 文件。如果沒有指定該參數或該參速是空的,Windows 將會使用文件的默認圖標。這個參數可以包括常量。
示例︰
IconFilename: "{app}\myicon.ico"
IconIndex
默認︰
0
說明︰
由 IconFilename 指定的文件的以零開始的圖標索引。
示例︰
IconIndex: 0
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
closeonexit
當設置了此標記時,安裝程式將設置快捷模式的“退出時關閉”屬性。這個標記僅對基于 MS-DOS 的應用程式有效 (具體說就是是否具有 .pif 擴展名)。如果這個標記和 dontcloseonexit 標記都沒有指定,安裝程式就不會去改變“退出時關閉”的屬性。
createonlyiffileexists
當設置了此標記時,安裝程式只創建已存在的由 Filename 參數指定的文件的應用程式圖標。
dontcloseonexit
類似于 closeonexit, 只是會導致安裝程式不選定“退出時關閉”屬性。
runmaximized
當設置了此標記時,安裝程式將應用程式圖標的“營運模式”設置為“最大化”,這樣當程式被啟動時以最大化的模式初始化。當安裝在 Windows NT 3.51 上時該標記不起作用。
runminimized
當設置了此標記時,安裝程式將應用程式圖標的“營運模式”設置為“最小化”,這樣當程式被啟動時以最小化的模式初始化。
uninsneveruninstall
告訴卸載程式不要刪除這個應用程式圖標。
useapppaths
當設置了此標記時,在 Filename 參數裡僅指定沒有路徑的文件名,以後安裝程式將會從註冊表的 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" 鍵裡面自動得到預先設定好的對應該文件名的路徑名。
示例︰
Flags: runminimized
公共參數
[INI] 段
此段時可選的,它定義了一些 .INI 文件項,在文件被複製以後安裝程式在用戶的系統中的設定。
這是 [INI] 段的一個示例︰
[INI]
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Flags: uninsdeletesection
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"
下面列出了支持的參數︰
Filename (必需的)
說明︰
你想要安裝程式修改的 .INI 文件的文件名,它可以包括常量。如果這個參數時空的,它將寫入系統的 Windows 目錄的 WIN.INI 文件。
示例︰
Filename: "{win}\MYPROG.INI"
Section (必需的)
說明︰
要被創建的段的名稱,可以包括常量。
示例︰
Section: "Settings"
Key
說明︰
要被設定的鍵的名稱,可以包括常量。如果沒有指定這個參數或這個參數是空的就不會創建任何鍵。
示例︰
Key: "Version"
String
說明︰
賦給鍵的值,可以使用常量。如果沒有指定該參數不會創建該鍵。
示例︰
String: "1.0"
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
createkeyifdoesntexist
只有該鍵不存在是才能給改建賦值。
uninsdeleteentry
程式被卸載時刪除該項,它可以結合 uninsdeletesectionifempty 標記一起使用。
uninsdeletesection
當程式被卸載時,刪除該項所在的整個段。對于由 Windows 本身使用的段(例如一些在 WIN.INI 中的段)來說這明顯不是一個好的主意,你應當將它用到自己的應用程式中的段。
uninsdeletesectionifempty
類似于 uninsdeletesection, 但是只能在該段中沒有了鍵的時候才能刪除。它可以結合 uninsdeleteentry 標記一起使用。
示例︰
Flags: uninsdeleteentry
公共參數
[InstallDelete] 段
它使用的是和 [UninstallDelete] 段相同的格式,不同的是它是在安裝程式的第一步被處理的。
[Messages] 段
[Messages] 段是用于定義安裝程式和卸載程式所顯示的消息。通常你不需要在你的腳本文件裡面創建 [Messages] 段,默認情況下所有的顯示消息都由 Inno Setup 包含的文件 Default.isl 定義。 (或由 [Setup] 段的關鍵字 MessagesFile 指定的任何文件).
然而,單獨的消息可以被你的腳本中創建的 [Messages] 段覆蓋。要這么做,首先你需要知道你要改變的消息的標識 (ID),在搜索 Default.isl 文件時能很容易的發現。例如,你想要改變安裝向導的按鈕 “下一步(&N)” 為 “向前(&F)”,該消息的標識為“ButtonNext”,那么你應該象這樣創建 [Messages] 段︰
[Messages]
ButtonNext=&Forward >
有些消息帶有象 %1 和 %2 這樣的參數,你可以重新排列參數的順序(例如將 %2 移到 %1 的前面)並且如果需要的話可以重複使用參數(例如“
%1 ... %1 %2”)。在帶有參數的消息中,使用兩個連續的“%”代替一個嵌入的“%”,“%n”創建一個換行。
如果你希望將 Inno Setup 的文本翻譯成其他語言修改並替換文件 Default.isl 或在你創建的腳本裡面覆蓋每個消息,做一個 Default.isl 的副本並另起一個名字就像 MyTranslation.isl. 在你要使用 MyTranslation.isl 的任何安裝程式中,簡單的將 [Setup] 段中的關鍵字 MessagesFile 指向該文件。
特殊用途的標識
有幾個 [Messages] 段的項實際上不是用于在螢幕上顯示的,它們是用于在安裝程式中指定所使用的字體和字型號的。這些可選項中的每一個都有一個前導下劃線字符 (“_”) 開始,請參閱 Default.isl 文件頭部的註釋的使用方法示例。
[Registry] 段
這個段是可選的,他定義了一些註冊表項,用于在複製完文件之后創建在用戶的系統中。
下面是 [Registry] 段的一個示例。
[Registry]
Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company\My Program"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
下面列出了支持的參數︰
Root (必需的)
說明︰
根鍵,必須是下列各項之一︰
HKCR (HKEY_CLASSES_ROOT)
HKCU (HKEY_CURRENT_USER)
HKLM (HKEY_LOCAL_MACHINE)
HKU (HKEY_USERS)
HKCC (HKEY_CURRENT_CONFIG)
示例︰
Root: HKCU
Subkey (必需的)
說明︰
子鍵名稱,可以包括常量。
示例︰
Subkey: "Software\My Company\My Program"
ValueType
說明︰
鍵值的數據類型,必須是下列各項之一︰
none
string
expandsz
multisz
dword
binary
如果指定了 none (默認設置),安裝程式將創建一個沒有鍵值的鍵,在這種情況下將忽略 ValueName 和 ValueData 參數。
如果指定了 string,安裝程式將創建一個字元串 (REG_SZ) 值。
如果指定了 expandsz,安裝程式將創建一個擴展字元串 (REG_EXPAND_SZ) 值。這種數據類型主要用在 Windows NT 上,但是也支持 Windows 95/98.
如果指定了 multisz,安裝程式將創建一個多行文本 (REG_MULTI_SZ) 值。
如果指定了 dword,安裝程式將創建一個整數 (REG_DWORD) 值。
如果指定了 binary,安裝程式將創建一個二進製 (REG_BINARY) 值。
示例︰
ValueType: string
ValueName
說明︰
要創建的鍵值的名稱,可以包含常量。如果它是空的,將會寫入“默認”(Default)值中。如果ValueType 參數被設置為 none, 該參數將被忽略。
示例︰
ValueName: "Version"
ValueData
說明︰
鍵值的數據。如果 ValueType 參數是 string, expandsz 或 multisz, 該參數是一個可以包含常量的字元串。如果數據類型是 dword, 該參數可以是一個十進製整數(例如“123”)或者是一個十六進製整數(例如“$7B”)。如果數據類型是 binary, 這是一個十六進製位元組序列的形式︰“00 ff 12 34”。如果數據類型是 none, 該參數被忽略。
對于一個 string, expandsz 或者 multisz 類型的鍵值,在這個參數中你可以使用一個特殊的叫做 {olddata} 的常量。{olddata} 常量代表的是註冊表鍵值原來的數據。如果你想要添加一個字元串到一個已經存在的鍵值時 {olddata} 常量時很有用的,例如,{olddata};{app}.如果該鍵值並不存在或者不是一個字元串類型,這時 {olddata} 常量會被默默地刪除。如果正要被創建的鍵值是 multisz 類型,但是已經存在的鍵值並不是多行文本 (例如它是 REG_SZ 或 REG_EXPAND_SZ )類型,這時 {olddata} 常量也會被默默地刪除,反之亦然。
對于一個 multisz 類型的鍵值,在這個參數中你可以使用一個特殊的叫做 {break} 的常量來嵌入換行(nulls)。
示例︰
ValueData: "1.0"
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
createvalueifdoesntexist
當指定了此標記時,只有當相同名稱的鍵值不存在時安裝程式才會創建該鍵值。如果數據類型是 none ,或者同時指定了 deletevalue 標記將忽略該標記。
deletekey
當指定了此標記時,如果該項已存在,安裝程式會首先嘗試去刪除它,包括其中的鍵值和子鍵,然後如果 ValueType 不是 none 的話它將創建一個新的鍵和鍵值。
deletevalue
當指定了此標記時,如果該鍵值已存在,安裝程式會首先嘗試刪除該鍵值。然後如果 ValueType 不是 none ,並且該鍵不存在時它將創建該鍵和新的鍵值。
dontcreatekey
當指定了此標記時,如果該鍵不存在于用戶的系統中安裝程式將不會試圖創建該鍵或任何鍵值。如果改建不存在將不顯示錯誤消息。
典型地該標記同 uninsdeletekey 標記結合使用,以便在安裝時沒有創建該鍵時確保在卸載期間刪除該鍵。
noerror
如果安裝程式在創建鍵或鍵值時無論什麼原因失敗不顯示錯誤消息。
preservestringtype
該標記只用于 ValueType 參數為 string 或 expandsz 時。當指定了此標記並且該鍵值不存在或者已存在的鍵值不是字元串類型(REG_SZ 或 REG_EXPAND_SZ) 時,該項將由 ValueType 指定的類型創建,如果該鍵值存在並且是一個字元串類型,該項將由與預先存在的鍵值相同的鍵值類型替代。
uninsclearvalue
當程式被卸載時,將設置該鍵值的數據為空的字元串 (類型 REG_SZ). 該標記不能同 uninsdeletekey 標記一起使用。
uninsdeletekey
當程式被卸載時,刪除整個鍵,包括其下全部的鍵值和子鍵。對于由 Windows 自身使用的鍵來說使用該標記明顯不是一個好的主意,你應當將該標記應用到你自己的應用程式鍵中。
uninsdeletekeyifempty
當程式被卸載時,如果該鍵下沒有其它鍵值和子鍵則將其刪除。該標記可以結合 uninsdeletevalue 標記一起使用。
uninsdeletevalue
當程式卸載時刪除該鍵值,該標記可以結合 uninsdeletekeyifempty 標記一起使用。
注意︰對于 Inno Setup 1.1 之前的版本,你可以與 none 數據類型一起使用該標記則將會成為 “delete key if empty” (如為空則刪除該鍵)功能的標記。這個技巧現下已經不在被支持,你必須使用 uninsdeletekeyifempty 標記來實現該功能。
示例︰
Flags: uninsdeletevalue
公共參數
[Run] & [UninstallRun] 段
[Run] 段是可選的,指定任意數量的程式在成功安裝程式以後及顯示結束對話框之前被執行。同樣 [UninstallRun] 段也是可選的,指定任意數量的程式在“卸載程式”的第一步時被執行。除非下面有其它說明,兩個段共有相同的語法。
每個程式按照你的腳本編排的順序被執行,當出路 [Run]/[UninstallRun] 的項時,安裝程式將會等到當前的程式終止之后才處理下一個,當然除非使用了 nowait 標記。
這是一個 [Run] 段的示例。
[Run]
Filename: "{app}\INIT.EXE"; Parameters: "/x"
下面列出了支持的參數︰
Filename (必需的)
說明︰
要被執行的程式,或要被打開的文件/文件夾。如果 Filename 不是一個 .exe 或 .com 文件,你必須在該項中使用 shellexec 標記。該參數可以包含常量。
示例︰
Filename: "{app}\INIT.EXE"
Parameters
說明︰
程式可選的命令行參數,該參數可以包含常量。
示例︰
Parameters: "/x"
WorkingDir
說明︰
程式起始位置的目錄。如果沒有指定該參數或該參數是空的,將不會改變任何特殊的目錄。該參數可以包含常量。
示例︰
WorkingDir: "{app}"
RunOnceId
說明︰
只在 [UninstallRun] 段裡面有效。如果相同的應用程式被安裝超過了一次,“run”項將會重複出現下卸載記錄文件裡面。透過將一個字元串賦值給 RunOnceId, 你可以確保一個獨特的 [UninstallRun] 項在卸載期間只被執行一次。例如,如果在卸載記錄中的“run”中有兩個或者更多的帶有 RunOnceId 參數並被設置為“DelService”的項,則只有最後一個帶有一個 RunOnceId 參數並被設置為“DelService”的項會被執行。其餘的將被忽略。注意 RunOnceId 參數是大小寫敏感的。
示例︰
RunOnceId: "DelService"
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
nowait
如果指定了該標記,將不會等待該項處理被結束營運之前就進行到下一個 [Run] 項,或者結束安裝程式。不能結合 waituntilidle
標記一起使用。
shellexec
如果 Filename 不是一個可以直接執行的文件(一個 .exe 或 .com 文件)則該標記是必需的。當設置了該標記時,Filename 可以是一個文件夾或者任何已註冊的文件類型 包括 .hlp, .doc 等等。文件將會被用戶系統中的與該文件類型相關聯的應用程式打開,就像用戶在資源管理器中用鼠標雙擊該文件一樣。
當在 Filename 中使用一個文件夾名稱時,建議在后面加上一個反斜杠字符(例如“{group}\”),以確保可能有相同名稱的程式不會被執行。同樣要注意文件夾只能在 Windows 95/NT 4+ 上被打開,因為從那時起使用了一個新的資源管理器的外殼。
使用 shellexec 標記有一個缺點,那就是無法等待該過程結束,因此,它始終就像被指定了 nowait 標記一樣操作。
skipifdoesntexist
如果指定了該標記,如果 Filename 不存在安裝程式將不會顯示錯誤消息。它只適用于 [Run] 段,因為卸載程式從來不顯示錯誤消息在 [UninstallRun] 項執行失敗時。
runmaximized
如果指定了該標記,將會在一個最大化的窗口啟動程式或文檔。
runminimized
如果指定了該標記,將會在一個最小化的窗口啟動程式或文檔。
waituntilidle
如果指定了該標記,它將暫停直到該過程正在等待用戶的輸入並且沒有未決的輸入時,取而代之的是等待該過程的結束。(該標記調用 WaitForInputIdle Win32 函數.) 不能結核 nowait 一起使用。
示例︰
Flags: nowait
公共參數
[UninstallDelete] 段
該段是可選的。該段是用來定義一些附加的除了那些被安裝的應用程式之外的要被卸載程式刪除的文件或目錄。使用該段來刪除由你的應用程式創建的 .INI 文件是一個常用的辦法。卸載程式在卸載過程的最後一步處理這些項。
這是一個 [UninstallDelete] 段的示例︰
[UninstallDelete]
Type: files; Name: "{win}\MYPROG.INI"
下面列出了支持的參數︰
Type (必需的)
說明︰
指出要被卸載程式刪除的是什麼。必須是下列之一︰
files
Name 參數指定的是一個具體的文件的名稱,或者是一個帶有通配符的文件名。
filesandordirs
功能上類似于 files ,但是它還可以匹配目錄名稱,並且任何名稱匹配的目錄包括其中所有的文件和子目錄都會被刪除。
dirifempty
當使用它時,Name 參數必須是一個目錄的名稱,但是它不能包括通配符。只有在不包含任何文件和子目錄的情況下該目錄才能被刪除。
示例︰
Type: files
Name (必需的)
說明︰
要被刪除的文件或目錄的名稱。
注意︰不要試圖透過在這裡使用通配符去刪除 {app} 目錄下的全部文件,我強烈建議你不要這樣做的原因由兩個,首先,用戶通常不會意識到可能還有他們放進應用程式目錄中的數據文件將要被刪除而不會得到警告(例如他們可能卸載應用程式只是為了要將它轉移到一個不同的驅動器)。最好是將其保留一直到最後用戶想要刪除時用手工的方法刪除;還有,如果由於用戶的失誤碰巧將程式安裝到了一個錯誤的目錄當中(例如 C:\WINDOWS)而這時去卸載它勢必結果會損失慘重。再次聲明,千萬不要這么做﹗
示例︰
Name: "{win}\MYPROG.INI"
公共參數
編譯器相關
[Setup]: Bits
有效值︰ 32
說明︰
1.3 版本以後已廢棄。 1.3 以前的版本的 Inno Setup 有一個 16 位的版本,編譯器將檢查 Bits 關鍵字以判斷是否使用了正確的編譯器來編譯腳本。以後 Inno Setup 的更新的版本只有 32 位的版本可用,你將不再需要設置該關鍵字。無論什麼時候如果 Bits 被設置為“16”,編譯器都將會失敗並提示一個錯誤消息。
[Setup]: UseSetupLdr
有效值︰ yes 或 no
默認值︰ yes
說明︰
告訴安裝程式編譯器要創建的安裝程式的類型,如果是 yes, 將把所有的安裝程式數據編譯成一個單獨的 SETUP.EXE (如果你願意也可以重新命名為任何名稱)。如果是 no, 將把安裝程式數據編譯成至少三個文件︰SETUP.EXE, SETUP.0 和 SETUP.1. 你想使用 no 的僅有的理由大概是為了調試的目的。
注意︰不要在一個使用了多磁片生成(DiskSpanning=yes)的安裝程式中使用 UseSetupLdr=no,當 UseSetupLdr 是 yes 時,安裝程式被複製到用戶的臨時 (TEMP) 目錄並在那裡營運,這不會發生在 UseSetupLdr 是 no 的情況下,如果 Windows 試圖去在磁片上尋找 setup.exe 文件卻不能找到,因為在驅動器中的是一個不同的磁片,所以會產生錯誤的結果。
[Setup]: BackColor, BackColor2
有效值︰ 一個值形如 $bbggrr, 這裡的 rr, gg 和 bb 指定了兩位的亮度值(以十六進製表示)分別為紅色,綠色和藍色。或者也可以是下列預定義的顏色名稱之一︰clBlack(黑色),clMaroon(暗紅),clGreen(綠色),clOlive(橄欖綠),clNavy(深藍),clPurple(紫色),clTeal(深青),clGray(灰色),clSilver(淺灰),clRed(紅色),clLime(淺綠),clYellow(黃色),clBlue(藍色),clFuchsia(紫紅),clAqua(青綠),clWhite(白色)。
默認值︰ BackColor 為 clBlue,
BackColor2 為 clBlack
說明︰
BackColor 關鍵字自定的顏色被用在安裝程式窗口背景漸變色的上面(或左面,如果 BackColorDirection=lefttoright),BackColor2 指定的顏色被用在下面(或右面)。
如果 BackSolid=yes 則 BackColor2 的設置被忽略。
示例︰
BackColor=clBlue
BackColor2=clBlack
BackColor=$FF0000
BackColor2=$000000
[Setup]: BackColorDirection
有效值︰ toptobottom 或 lefttoright
默認值︰ toptobottom
說明︰
決定了安裝程式窗口的背景漸變色的漸變方向,如果 BackColorDirection 是 toptobottom, 將自上而下繪出,如果是 lefttoright, 將從左到右繪出。
[Setup]: BackSolid
有效值︰ yes 或 no
默認值︰ no
說明︰
它決定了安裝程式窗口的背景色是使用單一顏色還是漸變色,如果是 yes, 背景色會是一單一顏色(顏色由 BackColor 指定,忽略 BackColor2)。
[Setup]: AppName
說明︰
這個必需的關鍵字指定了你正在安裝的應用程式的標題。不要包含版本號,那樣應該使用 AppVerName 關鍵字。AppName 在安裝程式的全部過程始終被顯示,位于安裝程式螢幕的左上角和向導中。
示例︰ AppName=My Program
[Setup]: AppVerName
說明︰
這個必需的關鍵字的值應該和 AppName 的值相同(或相似),但是它還應當包含程式的版本號。
示例︰ AppVerName=My Program version 3.0
[Setup]: AppId
默認值︰ 如果沒有指定 AppId 或者它是空值,編譯器將會把 AppName 的值作為 AppId 來使用。
說明︰
AppId 的值是被存儲在卸載記錄文件 (unins???.dat)裡面的,以便隨后的安裝程式檢查后決定是否可以被添加到一個特定的已存在的卸載記錄,安裝程式只有在已存在的卸載記錄中的 AppId 和當前的安裝程式的 AppId 相同是才能添加到卸載記錄。舉一個實際的例子,比方說你右兩個安裝程式,一個叫做《我的程式》而另外一個叫做《我的程式 1.1 升級版》,要想把《我的程式 1.1 升級版》添加到《我的程式》的卸載記錄中,你應該設置兩個安裝程式的 AppId 為相同的值。
AppId 還決定了卸載註冊表鍵的實際名稱,被 Inno Setup 在其末尾附加上“_is1”(因此,如果 AppId 是 “MyProgram”,那么這個鍵將會被命名為“MyProgram_is1”)。Inno Setup 的早于 1.3 的版本的鍵的名稱是基于 AppVerName 的值的。
無論什麼時候 AppId 都不會被顯示出來,因此你要求非常隱諱的感覺很輕鬆。
示例︰ AppId=MyProgram
[Setup]: AppMutex
說明︰
如果用戶要為當前的應用程式升級為新的版本,然而當前的應用程式正在營運,該關鍵字就是用來防止這類事情的發生的,而且它也可以防止用戶卸載正在營運的應用程式。它指定了一個或多個同名互斥體的名稱(多個互斥體用逗號隔開),安裝程式和卸載程式將會在啟動時檢查,如果存在,安裝程式/卸載程式將顯示如下的訊息︰“[安裝程式或卸載程式] 檢測到 [應用程式] 現下正在營運。請立即關閉它的全部實例,然後單機‘確定’繼續,或者‘取消’退出。”
如果你要使用這個關鍵字就必須在你的應用程式中以該關鍵字指定的名稱添加一個同名的互斥體。例如在 Delphi 和 C 中創建如下顯示的同名互斥體,該代碼應該在應用程式啟動是被執行。
Delphi:
CreateMutex(nil, False, ’MyProgramsMutexName’);
C:
CreateMutex(NULL, FALSE, "MyProgramsMutexName");
並不是必需在應用程式被結束之前顯示的銷毀同名互斥體對象,系統會自動完成此功能,也不推薦你這樣做,因為理想狀態下同名互斥體對象必須存在直到進程被完全終止。
注意在 Windows 下同名互斥體是大小寫敏感的。
要想獲得有關同名互斥體的更多訊息請參閱 MS SDK 幫助的 CreateMutex 主題。
示例︰ AppMutex=MyProgramsMutexName
[Setup]: AppCopyright
說明︰
可選的,它只是用來在安裝程式螢幕的右下角顯示一個版權消息。
示例︰ AppCopyright=Copyright ? 1997 My Company, Inc.
[Setup]: AppPublisher, AppPublisherURL, AppSupportURL, AppUpdatesURL, AppVersion
說明︰
所有這些關鍵字都是用來在 Windows 2000 的控制面板“添加/刪除程式”的“支持”對話框中顯示一些訊息。這些設置是可選的,並且在早期的 Windows 版本中是沒有作用的。
示例︰
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.mycompany.com/
AppVersion=1.5
[Setup]: DefaultDirName
說明︰
這是個必需的關鍵字,該值是默認的目錄名稱,用于“選擇目錄頁”向導。通常它有一個目錄常量前綴。
如果 UsePreviousAppDir 是 yes (默認值)並且安裝程式發現已經安裝了一個相同應用程式的早期版本,它將用先前選擇的目錄代替默認的目錄名稱。
示例︰
如果你使用︰
DefaultDirName={sd}\MYPROG
在 Setup 中,典型地應有如下顯示︰
C:\MYPROG
如果你使用︰
DefaultDirName={pf}\My Program
在 Setup 中,典型地應有如下顯示︰
C:\Program Files\My Program
[Setup]: Uninstallable
有效值︰ yes 或 no
默認值︰ yes
說明︰
它決定了 Inno Setup 的自動卸載程式是否被包含在安裝程式中。如果是 yes 將包含卸載程式,如果是 no 將不會包括可卸載支持,最終用戶只能用手工的方法刪除屬于你的應用程式的文件。
[Setup]: MinVersion
格式︰ a.bb,c.dd, 這裡的 a.bb 是表示 Windows 的版本,c.dd 是表示 Windows NT 的版本。
默認值︰ 4,4
說明︰
該關鍵字讓你指定營運你的軟體所需要的最低的 Windows 或 Windows NT 的版本,默認值是“4,4”,實際上它也可以被設置為“4,3.51”來支持 NT 3.51 . 要防止你的程式被營運在 Windows 或 Windows NT 上,指定“0”為其中之一的最低版本。版本創建編號(Build numbers)和(或)服務包級別(Service pack levels)可以被包括在版本號中。
如果用戶的系統不適合所要求的最低版本,安裝程式將給出一個錯誤消息然後退出。
[Setup]: OnlyBelowVersion
格式︰ a.bb,c.dd, 這裡的 a.bb 是表示 Windows 的版本,c.dd 是表示 Windows NT 的版本。
默認︰ 0,0
說明︰
該關鍵字讓你指定不能營運你的軟體的最低的 Windows 或 Windows NT 的版本(亦即高于此版本則無法營運)。指定 0 為其中之一的版本的意思是沒有版本上限。版本創建編號(Build numbers)和(或)服務包級別(service pack levels)可以被包括在版本號中。
該關鍵字實際上是和 MinVersion 恰好相反。
[Setup]: AdminPrivilegesRequired
有效值︰ yes 或 no
默認值︰ no
說明︰
如果設置為 yes, 而且用戶沒有管理員的權限,那么安裝程式在啟動的時候將給出一個錯誤消息(“安裝這個程式時你必須以管理員的身分登錄。”)。它只適用于 Windows NT/2000.
[Setup]: DisableAppendDir
有效值︰ yes 或 no
默認值︰ no
說明︰
當設置為 yes 時,安裝程式不會自動的添加上次組件的路徑從 DefaultDirName 到用戶在“選擇目錄”向導頁上雙擊鼠標選擇的目錄。此外,它設置目錄列表框的初始目錄為 DefaultDirName (如果該目錄存在)而不是上一級。
[Setup]: EnableDirDoesntExistWarning
有效值︰ yes 或 no
默認值︰ no
說明︰
當設置為 yes 時,如果用戶選擇的文件夾不存在安裝程式將顯示一個消息框。當這項為 yes 時通常你還應該設置 DirExistsWarning=no。
[Setup]: AlwaysCreateUninstallIcon
有效值︰ yes 或 no
默認值︰ no
說明︰
如果該項為 yes, 除了在控制面板的添加/刪除程式中添加一項之外安裝程式還將創建一個 “卸載 ...” 應用程式圖標。
在 NT 3.51 上安裝程式將會始終創建這個應用程式圖標不管該項的設置,因為它沒有包含“添加/刪除程式”的部件。
[Setup]: ExtraDiskSpaceRequired
默認值︰ 0
說明︰
正常情況下,磁片空間的需求是依照 [Files] 段中的所有文件的合計值計算出來並在向導中被顯示的。如果不管什麼原因你想要增加顯示的磁片空間,以位元組為單位設置 ExtraDiskSpaceRequired 的數值你想要合計該數字。 (1048576 位元組 = 1 兆位元組)
[Setup]: CompressLevel
有效值︰ 0 到 9
默認值︰ 7
說明︰
這是一個從 1 到 9 的數字,它指定了要給文件使用多大的壓縮率,0 表示不壓縮,9 表示最大限度的壓縮。數字越大處理的就越慢,使用高于默認值 7 的數字來壓縮並沒有多大的改善。
[Setup]: CreateAppDir
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果該值設置位 no, 將不會創建應用程式的目錄,也不會顯示“選擇目的文件夾”向導頁,並且 {app} 目錄常量會等效為 {win} 目錄常量。當 CreateAppDir 是 no 時如果卸載功能是允許的,卸載數據文件將會被創建于系統的 Windows 目錄。
[Setup]: CreateUninstallRegKey
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果該值設置為 no, 安裝程式將不會在控制面板的“添加/刪除程式”中創建一項。這個可以用于你的應用程式只是更新一個已經存在的應用程式而不想創建其它的項,但是請不要完全的禁止卸載功能(透過 Uninstallable=no)。
當這個關鍵字設置為 no 時,UpdateUninstallAppName 通常也設置為 no .
[Setup]: OverwriteUninstRegEntries
說明︰
1.3 版本以後已廢棄。該關鍵字已經不再被支持並且被忽略。在 Inno Setup 1.3.6 及以後的版本中,它的功能作為如果設置為 1 優先版本的 OverwriteUninstRegEntries 關鍵字(這是默認的設置)。
[Setup]: DirExistsWarning
有效值︰ auto, yes 或 no
默認值︰ auto
說明︰
當設置為 auto 時,即默認的設置,如果用戶在選擇目標文件夾向導頁中選擇了一個已經存在的文件夾,安裝程式將顯示“文件夾︰ … 已經存在,以願意將程式安裝到這個文件夾下面嗎?”的消息,除非有相同的應用程式的其它版本已經安裝並且也選擇了和上次安裝時相同的目錄(僅如果 UsePreviousAppDir 是 yes ,即默認設置)。
當設置為 yes 時,如果用戶選擇了已存在的目錄安裝程式將始終顯示“目錄已存在的消息”。
當設置為 no 時,安裝程式決不會顯示“目錄已存在的消息”。
[Setup]: DisableDirExistsWarning
有效值︰ yes 或 no
默認值︰ no
說明︰
到版本 1.3.6 時已經廢棄。使用 DirExistsWarning 代替。
編譯器仍然承認 DisableDirExistsWarning,但是如果 DisableDirExistsWarning=no 它將被轉換成 DirExistsWarning=auto, 而且 DisableDirExistsWarning=yes 被轉換成 DirExistsWarning=no. 如果同時指定了 DisableDirExistsWarning 和 DirExistsWarning 關鍵字,則優先處理 DirExistsWarning.
[Setup]: DisableDirPage
有效值︰ yes 或 no
默認值︰ no
說明︰
如果該項設置為 yes, 安裝程式將不會顯示“選擇目標文件夾”向導頁。在這種情況下,它將始終使用默認的目錄名。
[Setup]: DisableFinishedPage
有效值︰ yes 或 no
默認值︰ no
說明︰
如果該項設置為 yes, 安裝程式將不會顯示“安裝完成”向導頁,並且在一次安裝過程結束后會立即關閉安裝程式。如果在 [Run] 段裡面有一個要被執行的程式使用了 nowait 標記,並且你不希望在該程式被啟動之候安裝完成窗口還逗留在后台,此時該項是有用的。
注意安裝程式認為要重新啟動計算機,或如果指派了一個文件給 [Setup] 段的 InfoAfterFile 關鍵字,都將忽略 DisableFinishedPage 關鍵字。象這些情況,仍然會顯示“安裝完成”向導頁。
[Setup]: DisableProgramGroupPage
有效值︰ yes 或 no
默認值︰ no
說明︰
如果該項設置為 yes, 安裝程式將不會顯示“選擇程式組”向導頁。在這種情況下,它將使用由 [Setup] 段的 DefaultGroupName 關鍵字指定的組名,或者“(Default)”如果沒有指定組名的話。
[Setup]: AlwaysUsePersonalGroup
有效值︰ yes 或 no
默認值︰ no
說明︰
通常對于 Windows NT/2000, 如果用戶具有管理員權限,Inno Setup 的 {group} 常量被指向全部用戶(All Users)的開始菜單。如果該項被設置為 yes, 它將始終使用當前用戶的私人文檔(Profile)。
[Setup]: OutputBaseFilename
默認值︰ setup
說明︰
這個關鍵字允許你為輸出的安裝程式文件指定一個不同的名字,這樣一來你就不用在營運完安裝編譯器以後手工為它們改名。
注意︰如果 UseSetupLdr 被設置為 no, 輸出文件 SETUP.0 和 SETUP.MSG 的名字是不會被改變的,因為它們是強製編碼(hard-coded)的名字。
示例︰ OutputBaseFilename=MyProg100
[Setup]: UninstallFilesDir
默認值︰ {app}
說明︰
指定存放卸載程式文件“unins*.*”的目錄。
注意︰對于同一個應用程式的更新版本不應該將它賦一個不同的值,這樣一來安裝程式就不能在以前的版本中找到卸載記錄,因此就不能添加到該應用程式。
示例︰ UninstallFilesDir={app}\uninst
[Setup]: UninstallDisplayIcon
說明︰
讓你指定一個確定的圖標文件(可以是一個可執行文件或者一個 .ico 文件)來顯示在 Windows 2000 控制面板的“添加刪除程式”的卸載項當中,文件名通常以一個目錄常量開始。
如果指定的文件包含多個圖標,你可以加上“,n”后綴以指定一個圖標索引,這裡的 n 是以零為基數的索引數值。
如果沒有指定該關鍵字或者該關鍵字為空,Windows 將自己選擇一個圖標,當然這個可能是你不太喜歡的圖標。
示例︰
UninstallDisplayIcon={app}\MyProg.exe
UninstallDisplayIcon={app}\MyProg.exe,1
[Setup]: UninstallDisplayName
說明︰
讓你為控制面板的“添加/刪除程式”中的程式項指定一個製定的名字。如果未指定該關鍵字或該關鍵字為空,安裝程式將使用 [Setup] 段中的 AppVerName 關鍵字的名字(就像老版本的 Inno Setup 一樣)。
由於 Windows 9x 的控制面板的“添加/刪除程式”項的限制,UninstallDisplayName 不能超過 63 個字符。
示例︰
UninstallDisplayName=My Program
[Setup]: UninstallIconName
說明︰
你能夠使用該關鍵字給安裝程式創建的卸載圖標指定一個製定的名字(參見AlwaysCreateUninstallIcon)。如果該關鍵字為空或沒有指定,安裝程式將其命名為“卸載 App-Name”,這裡的“App-Name”是由 [Setup] 段的關鍵字 AppName 指定的。
注意︰ 記住 Windows 95/NT 4+ 的應用程式圖標是作為文件直接存儲的,這樣一來普通文件所不允許使用的字符都不能用來作為應用程式圖標的名稱。
示例︰ UninstallIconName=Uninstall My Program
[Setup]: UninstallLogMode
有效值︰ append, new 或 overwrite
默認值︰ append
說明︰
append, 默認設置,如果可能,通知安裝程式添加到一個已存在的卸載記錄。
new, 同 Inno Setup 1.3 版本以前的版本的行為是一致的,通知安裝程式始終創建一個新的卸載記錄。
overwrite 通知安裝程式要覆蓋相同的應用程式的任何已存在的卸載記錄而不是添加(這是不被推薦的)。相同的規則添加到已存在的記錄應用于覆蓋已存在的記錄。
示例︰ UninstallLogMode=append
[Setup]: UpdateUninstallAppName
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果為 yes, 當添加到一個已存在的卸載記錄時,安裝程式將以當前的安裝程式的 AppName 替換在卸載記錄中的 AppName. 卸載記錄中的 AppName 決定了卸載程式顯示的標題。如果你的安裝程式只是一個升級或附加到一個已存在的程式,並且你不想改變卸載程式的標題,那么你可以設置該值為 no.
[Setup]: DefaultGroupName
說明︰
該關鍵字的值是默認的“程式管理器/開始菜單”程式組的名稱,它被“選擇程式組”向導頁使用。如果該關鍵字為空或沒有指定的話,它將會使用“(默認)”作為其名稱。
注意︰ 記住 Windows 95/NT 4+ 的應用程式圖標是作為文件直接存儲的,這樣一來普通文件所不允許使用的字符都不能用來作為應用程式圖標的名稱。
示例︰ DefaultGroupName=My Program
[Setup]: DisableStartupPrompt
有效值︰ yes 或 no
默認值︰ no
說明︰
如果該值被設為 yes, 安裝程式將不會顯示“準備安裝…,你希望繼續嗎?”的提示。
如果 UseSetupLdr 被設置為 no 該值將不會產生作用。
[Setup]: DiskSpanning
有效值︰ yes 或 no
默認值︰ no
說明︰
決定編譯器是創建一個單獨的 SETUP.EXE, 還是把它分割成為幾個文件以適合于放到分開的軟磁片上。當這個關鍵字被設置為 yes, 磁片生成是允許的,將輸出文件 SETUP.EXE 和 SETUP.1 複製到第一個磁片上,SETUP.2 複製到第二個磁片上,等等。
[Setup]: DiskSize
默認值︰ 1457664 (一個 1.44MB 軟磁片的大小)
說明︰
指定了一個磁片的可用空間統計數值的位元組值。
如果 [Setup] 段的關鍵字 DiskSpanning 沒有允許磁片輸出則這個關鍵字就會被忽略。
[Setup]: DiskClusterSize
默認值︰ 512 (軟磁片的標準的簇的大小)
說明︰
它指定了磁片介質的簇的大小。安裝編譯器需要知道該值為了適當的填充每一個磁片的容量。
如果 [Setup] 段的關鍵字 DiskSpanning 沒有允許磁片輸出則這個關鍵字就會被忽略。
[Setup]: ReserveBytes
默認值︰ 0
說明︰
指定了應該在第一張磁片上保留的最小空閒位元組數,這樣可以用于將其它的不是安裝程式部分的文件複製到第一張磁片上,比如說一個自述文檔。
安裝編譯器將把這個數值取整為最接近的簇。
如果 [Setup] 段的關鍵字 DiskSpanning 沒有允許磁片輸出則這個關鍵字就會被忽略。
[Setup]: DontMergeDuplicateFiles
有效值︰ yes 或 no
默認值︰ no
說明︰
通常兩個具有相同的源文件的項將只會被存儲和壓縮一次。如果你的安裝程式中有一組相同的文件,在腳本中使他們只想相同的源文件,這樣你的安裝程式的能夠明顯縮小。如果由於某些原因你希望禁止這個功能,設置該關鍵字為 yes .
[Setup]: AllowNoIcons
有效值︰ yes 或 no
默認值︰ no
說明︰
這個用于決定安裝程式是否顯示一個“不創建任何圖標”的複選框,這樣使用戶能夠跳過創建程式圖標的過程。如果該項為 no 將不會顯示複選框,如果為 yes 則將被顯示。
如果安裝程式營運在 NT 3.51 上時選擇了“不創建任何圖標”的複選框,那么用戶能夠徹底卸載應用程式的辦法只有執行應用程式目錄下面的 unins???.exe 文件。因為這個原因,我們推薦你保留 AllowNoIcons 設置為 no.
[Setup]: AllowRootDirectory
有效值︰ yes 或 no
默認值︰ no
說明︰
當設置為 no 時,即默認的,用戶將不能被允許在“選擇目錄頁”向導中輸入一個根目錄(就像“C:\”)。
[Setup]: AlwaysRestart
有效值︰ yes 或 no
默認值︰ no
說明︰
當設置為 yes, 安裝程式始終會在一次成功的安裝過程結束后提示用戶重新啟動系統,而不管這是不是必須的(因為在 [Files] 段的一些項當中帶有 restartreplace 標記)。
[Setup]: MessagesFile
默認值︰ compiler:DEFAULT.ISL
說明︰
指定要讀取的默認訊息的文件的名稱。營運安裝編譯器時該文件必須位于你的安裝程式的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
當指定了多個文件時,它們時按照它們所排列的順序被讀取的,因而最後的消息文件中的消息就會覆蓋其先前的消息文件。
請參見 [Messages] 段幫助主題關於 .isl 文件格式的詳細資料。
示例︰ MessagesFile=compiler:czech.isl
MessagesFile=compiler:default.isl,compiler:mymessages.isl
[Setup]: LicenseFile
說明︰
指定一個可選的許可協議文件的名稱,為 .txt 或 .rtf (豐富文本)格式,它在用戶選擇程式的目標文件夾之前被顯示。營運安裝編譯器時該文件必須位于你的安裝程式的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
示例︰ LicenseFile=license.txt
[Setup]: InfoBeforeFile
說明︰
指定一個可選的自述文檔(Readme)的名稱,為 .txt 或 .rtf (豐富文本)格式,它在用戶選擇程式的目標文件夾之前被顯示。營運安裝編譯器時該文件必須位于你的安裝程式的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
示例︰ InfoBeforeFile=infobefore.txt
[Setup]: InfoAfterFile
說明︰
指定一個可選的自述文檔(Readme)的名稱,為 .txt 或 .rtf (豐富文本)格式,它會在安裝成功以後被顯示。營運安裝編譯器時該文件必須位于你的安裝程式的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以 “compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
這個不同于代有 isreadme 標記的文件項,它的文本是作為向導的一頁被顯示的,而后者顯示于一個單獨的記事本窗口。
示例︰ InfoAfterFile=infoafter.txt
[Setup]: ChangesAssociations
有效值︰ yes 或 no
默認值︰ no
說明︰
當設置為 yes 時,安裝程式會在其安裝過程結束時告訴資源管理器要刷新它的文件關聯訊息,並且卸載程式在其卸載過程結束時也會去這樣作。如果安裝程式營運在 Windows NT 3.51 上時這個關鍵字時不起作用的。
如果你的安裝程式創建了一個文件關聯但是沒有將 ChangesAssociations 設置為 yes, 該文件類型的正確的圖標很可能不會被顯示知道用戶註銷或者重新啟動計算機。
[Setup]: UsePreviousAppDir
有效值︰ yes 或 no
默認值︰ yes
說明︰
當該關鍵字被設置為 yes 時,即默認值,再安裝程式啟動時將會在註冊表中查找看是否有相同的應用程式已經被安裝,如果是這樣,它將使用先前的安裝程式的目錄作為默認的目錄提供給用戶的向導。
注意只有 Inno Setup 1.3.1 和其后續版本才會在註冊表中保存安裝的目錄,就是說安裝程式不會“看見”老版本的 Inno Setup 安裝的應用程式。
[Setup]: UsePreviousGroup
有效值︰ yes 或 no
默認值︰ yes
說明︰
當該關鍵字被設置為 yes 時,即默認值,再安裝程式啟動時將會在註冊表中查找看是否有相同的應用程式已經被安裝,如果是這樣,它將使用先前的安裝程式的開始菜單組作為默認的開始菜單組提供給用戶的向導。
注意只有 Inno Setup 1.3.1 和其后續版本才會在註冊表中保存安裝的目錄,就是說安裝程式不會“看見”老版本的 Inno Setup 安裝的應用程式。
[Setup]: Password
說明︰
指定一個密碼,在安裝過程開始時提示用戶輸入。
如果使用了一個密碼,重要的是要緊記並沒有加密技術被使用,並且 Inno Setup 的源代碼是完全開放的,對于一個個別的富有經驗的人來說從安裝程式中移去密碼的保護不是十分困難的。使用密碼僅僅起到一個阻止那些沒有得到授權的人使用你的安裝程式。
[Setup]: WizardImageFile
默認值︰ compiler:WIZIMAGE.BMP
說明︰
指定要在安裝程式向導左側顯示的位圖文件的名稱。營運安裝編譯器時該文件必須位于你的安裝程式的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
當前還不支持 256 色位圖,因為尚未使用調色板句柄。位圖的最大尺寸是 117x231 象素。
示例︰ WizardImageFile=myimage.bmp
[Setup]: WindowShowCaption
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果設置為 no, 安裝程式將會是真正的“全螢幕” 它沒有標題欄和邊框,並且會位于任務欄的前面。
[Setup]: WindowStartMaximized
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果設置為 no, 安裝程式啟動時不會初始為最大化,這樣會導致藏起任務欄。
[Setup]: WindowResizable
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果設置為 no, 在安裝程式背景窗口不是最大化狀態時用戶將不能調整其大小。
[Setup]: WindowVisible
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果設置為 no, 安裝程式背景窗口將是不可見的 只有向導和安裝過程窗口。
[Setup]: WizardImageBackColor
有效值︰ 一個值形如 $bbggrr, 這裡的 rr, gg 和 bb 指定了兩位的亮度值(以十六進製表示)分別為紅色,綠色和藍色。或者也可以是下列預定義的顏色名稱之一︰clBlack(黑色),clMaroon(暗紅),clGreen(綠色),clOlive(橄欖綠),clNavy(深藍),clPurple(紫色),clTeal(深青),clGray(灰色),clSilver(淺灰),clRed(紅色),clLime(淺綠),clYellow(黃色),clBlue(藍色),clFuchsia(紫紅),clAqua(青綠),clWhite(白色)。
默認值︰ clTeal
說明︰
該關鍵字指定了用于填充向導位圖(由 WizardImageFile 指定)周遭的未使用區域的背景顏色。
[Setup]: SourceDir
說明︰
給腳本指定一個新的源目錄sourcedirectorynotes。
示例︰ SourceDir=c:\files
[Setup]: OutputDir
說明︰
給腳本指定一個新的輸出目錄,這是安裝編譯器放置輸出的 SETUP.* 文件的地方。默認情況下它在含有腳本文件的目錄下創建一個“OUTPUT”子目錄。
示例︰ OutputDir=c:\output
其它
關於 Program Files 目錄的說明
Program Files 目錄歷來就只被 Windows 95/NT 4+ 支持。在 NT 3.51 上一個“類比的” Program Files 目錄被創建于系統驅動器目錄下硬代碼名稱“\Program Files”。
源目錄
默認情況下,如果沒有包含全程路徑名,安裝編譯器期望在與腳本文件相同的目錄中找到在腳本中 [Files] 段引用的 Source 參數的文件和 [Setup] 段引用的文件。要指定一個不同的源目錄,在腳本的 [Setup] 段中創建一個 SourceDir 關鍵字。
使用版本創建編號和(或)服務包級別
在 MinVersion 和 OnlyBelowVersion 中的版本號能夠包含版本創建編號(Build numbers)和(或)服務包級別(service pack levels) 例如︰5.0.2195, 5.0sp1, 5.0.2195sp1。如果一個版本創建編號沒有被指定或者為零,安裝程式將不會檢查版本創建編號。如果一個服務包級別沒有被指定或者為零,安裝程式會將其解釋為“沒有服務包”。注意安裝程式只能在 NT 4.0 及其后續版本中檢查服務包級別,所以指定“3.51sp5”去檢查NT 3.51 SP5 將不會工作。
關於"yes" 和 "no" 的說明
為了保持和舊版本 Inno Setup 的兼容性,1 和 0 可以分別的代替 yes 和 no 使用。
另外,它也允許 true 和 false 代替 yes 和 no 使用。
相同的應用程式
“相同的應用程式” 涉及到兩個分開的安裝程式共享一個相同的 AppId 設置 (或者如果 AppId 沒有設置,那么有相同的 AppName 設置).
添加到已存在的卸載記錄
當一個新版本的應用程式被安裝並覆蓋一個已存在的版本時,並不創建一個新的卸載記錄文件(unins???.dat),安裝程式會在默認的情況下尋找並添加到一個已存在的屬于相同的應用程式並在相同的目錄中的卸載記錄文件中,這樣,當應用程式被卸載時,所有的不同的安裝程式所做的改變將會被撤銷(開始于最近的安裝程式)。
卸載程式將會使用最近的應用程式的安裝程式的消息(messages)。然而,有一個例外︰如果一個安裝程式被一個舊版本的 Inno Setup 所創建,它包含一個比用戶系統中的已存在的版本還要舊的卸載程式,兩個卸載程式的消息都不會被替換,儘管在這種情況下卸載記錄仍然會被添加,因為它的文件格式是向后兼容的。
卸載程式顯示的應用程式的名稱將會與最近安裝程式中 [Setup] 段的關鍵字 AppName 的值相同,除非 UpdateUninstallAppName 被設置為 no.
卸載記錄添加功能是不熟悉的 Inno Setup 1.3。如果你希望禁止它,設置 [Setup] 段的關鍵字 UninstallLogMode.
注意︰安裝程式只能添加到被 Inno Setup 1.3.1 (及其后續版本)的安裝程式創建的卸載記錄文件中。
http://www.52z.com/soft/14374.html 這裡下載最新版的 inno setup
如何使用︰
文檔約定
創建安裝程式
創建腳本
段內參數
一些常量
公共參數
安裝腳本段
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
其它問題︰
其它注意事項
在命令行執行編譯器
安裝命令行參數
文檔約定
"Windows 95/NT 4+"
這是 Windows 95, 98, NT 4.0, 2000 以及更高版本的簡稱。
"Windows 98/NT 4+"
這是 Windows 98, NT 4.0, 2000 以及更高版本的簡稱。
"Windows NT"
無論何時提及 Windows NT,除非有其他說明,他總是包括 Windows 2000(亦即 NT 5.0)。
等寬字體
當你看見文檔裡的等寬字體,說明他是腳本文件的引用。
創建安裝程式
安裝程式是以腳本(script)的模式來創建的。(不要一看見“腳本”這個術語就害怕,你只需要花上幾分鐘的時間就可以掌握它的要領﹗)
該腳本文件的擴展名是“.iss”(意思是 Inno Setup Script)。腳本文件控制了安裝程式的每一個外觀界面。它指定了哪些文件要被複製及其位置,創建什麼應用程式圖標和為它們命名等等。
腳本文件通常可以用安裝編譯程式內建的編輯器來創建和編輯,完成以後寫入腳本文件,下一步也是最後一步是在安裝編譯器的菜單裡選擇“編譯 ”(Compile)。創建完成以後該干什麼呢?準備營運這個基于該腳本的安裝程式吧﹗默認情況下,這個文件被創建在腳本文件所在文件夾的 “OUTPUT”子文件夾下。
要了解腳本文件是如何工作的,營運安裝編譯器,單擊“文件\打開”選擇一個位于 Inno Setup 文件夾的 Samples 子文件夾下的示例腳本文件。(用這些示例文件作為你自己的腳本文件的模板可能示非常有用處的。)
參見
創建腳本
創建腳本
一個 Inno Setup 腳本是一個簡單的 ASCII 文本文件。它的格式非常類似于 .INI 文件,如果你有這方面的經驗你就會發現學習起來有多么的容易。
就象下面的示例所顯示的,腳本文件包括“段”(sections)和“項”(entries)。段名的兩邊始終有一對中括號“[]”,在 [Setup] 段中的每一項包括一個關鍵字和他的值,關鍵字和值用等于號“=”連接在一起。下面的這個示例說明了腳本文件是如何被組織的︰
[在這裡添加段名,例如 Setup]
這是一個關鍵字=這是一個值
這是其它的關鍵字=這是其它的值
[在這裡添加段名,例如 Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
你也可以在你的腳本文件中加上註釋(這些註釋將會被安裝編譯器忽略),方法是在每一行註釋的行首加上一個分號“;”,例如︰
; 這是一行註釋,我可以在這裡寫上提醒我的內容...
參見
段內參數
一些常量
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
段內參數
腳本文件中的所有的段,除了[Setup],都是以行位單位,每行分為若干個參數。下面是一個 [Files] 段的示例︰
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.HLP"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
每一個參數都有一個名稱,后面緊跟一個冒號,然後是它的值。除非有其它的說明,參數是可選的,如果參數沒有指定則取它們的默認值。如果一行內有多個參數則用分號將其分開 (還可以加一個空格符),他們可以按任何順序排列出來。
參數的值多數情況下是用引號擴起來("),但使用引號也是可選的。然而如果這個參數的值裡面的前導符號或者后綴符號是空格的話就必須加上引號了。另外需要說明的是使用內嵌的分號和引號,要插入一個引號則使用兩個連續的引號來代替。例如,下面的示例︰
"This "" contains "" embedded "" quotes"
""""
安裝程式編譯器將會視為︰
This " contains " embedded " quotes
"
一些常量
多數的腳本項都可以在它們的內部嵌入“常量(constants)”,它們總是被一對大括號({ })擴起來的。當安裝程式被啟動的時候,這些常量將被轉換成其真實的值,這倚賴于用戶的選擇和系統配置,例如,{win} 這個常量在絕大多數的系統當中將被轉換成“C:\WINDOWS”。
字符“{”被視為一個常量的起始標記,如果你想獲得的是它的真實字符,那么你必須使用兩個連續的“{”字符。
如果一個常量的后面緊跟著一個反斜杠,而此時這個常量被轉換成其真實值的結尾也是一個反斜杠時,Inno Setup 會自動的刪除一個反斜杠,這樣處理的明顯的好處是如果這個常量指向了“C:\”,{常量名}\file 就會被正確的轉換成“C:\file”而不是“C:\\file”。然而如果你想要防止這種事情的發生,那么就要將反斜杠用大括號括起來,象這樣︰ {app}{\}.
下面所列出的是目前已經被支持的常量。
目錄常量
{app}
應用程式目錄,這是用戶在安裝向導的選擇安裝目錄頁裡面所選擇的。
例如︰如果你使用了 {app}\MYPROG.EXE 作為一項並且用戶選擇了“C:\MYPROG”作為應用程式的目錄,那么安裝程式就會將它轉換成“C:\MYPROG\MYPROG.EXE”。
{win}
系統的 Windows 目錄。 例如︰如果你使用了 {win}\MYPROG.INI 作為一項並且系統的 Windows 目錄是“C:\WINDOWS”,那么安裝程式就會將它轉換成“C:\WINDOWS\MYPROG.INI”。
{sys}
系統的 Windows 系統(System)目錄(在 Windows NT/2000 下是 System32)。
例如︰如果你使用了 {sys}\CTL3D32.DLL 作為一項並且系統的 Windows 系統目錄是“C:\WINDOWS\SYSTEM”,那么安裝程式就會將它轉換成“C:\WINDOWS\SYSTEM\CTL3D32.DLL”。
{src}
這個文件夾指向安裝程式所在的位置。
例如︰如果你使用了 {src}\MYPROG.EXE 作為一項並且用戶是從“S:\ ”安裝的,那么安裝程式就會將它轉換成“S:\MYPROG.EXE”。
{sd}
系統驅動器,它是指 Windows 被安裝到的那個驅動器,典型的是“C:”,對于 Windows NT/2000,這個常量同系統的環境變量“SystemDrive”是等效的。
{pf}
程式文件夾(Program Files),這個路徑是系統的 Program Files 目錄,典型的是“C:\Program Files”。
{cf}
公共文件夾(Common Files),這個路徑是系統的 Common Files 文件夾,典型的是“C:\Program Files\Common Files”。
{tmp}
臨時目錄,這個目錄並不是用戶的 TEMP 環境變量指向的目錄,而是安裝程式在啟動時在用戶的臨時目錄下建立的一個子目錄(它有一個類似于“
C:\WINDOWS\TEMP\IS-xxxxx.tmp”這樣的名字),在安裝程式退出時所有的文件和子目錄將會被刪除。對于在 [Run] 段裡面要被執行且在安裝以後又不需要的程式文件來說這個功能是非常有用的。
{fonts}
字體目錄,在 Windows 95/NT 4+ 下有一個專門為字體設立的目錄(通常這個目錄在 Windows 目錄下且被命名為“FONTS”),這個常量就指向這個目錄。對于 Windows NT 3.51,這個常量是和 {sys} 等效的,因為當時還沒有字體目錄。
{dao}
DAO 目錄,當安裝程式營運在 Windows 95/NT 4+ 上時,它被等效為 {
cf}\Microsoft Shared\DAO,當營運于 Windows NT 3.51 時,它被等效為 {
win}\MSAPPS\DAO.
外殼(Shell)文件夾常量
Inno Setup 還支持另外一套目錄常量,這就是涉及到的外殼(shell)文件夾常量,它們具有和其它的目錄常量相同的使用方法。然而,如果在腳本的 [Setup] 段裡面放入了 MinVersion=4,3.51 這一行來表示允許支持 NT 3.51,那么將只有 {group} 這個外殼文件夾常量能被使用,並簽只能用在 [Icons] 段。
下面的包含了“user”的常量涉及到當前登陸的用戶私人文檔(profile),而帶有“
common”的常量會涉及到全部用戶(All Users)的私人文檔(profile)。當安裝程式營運在 Windows NT/2000 作業系統下並且用戶不具有管理員的權限時,所有的帶有“common”的常量會強迫同帶有“user”的常量等效。
* 標記表示帶有“common”的常量在 Windows 9x 作業系統下同帶有“user”的常量等效。
{group}
程式組的路徑,取決于用戶在安裝程式向導的“選擇程式組”頁的選擇。對于 Windows NT,這個文件夾始終被建立在所有用戶的私人文檔(All Users profile),除非用戶正在安裝的這個應用程式不具有管理員的權限,那么在這種情況下它將被建立在用戶的私人文檔中(profile).
{sendto}
當前用戶的“發送”的路徑。(沒有公共的“發送”文件夾。)
{userappdata} & {commonappdata}
應用程式數據(Application Data)文件夾的路徑。
{userdesktop} & {commondesktop} *
桌面文件夾的路徑,推薦桌面快捷模式使用 {userdesktop}.
{userdocs} & {commondocs}
“我的文檔”文件夾的路徑(或者對于 NT 4.0,是指私人文件夾).
{userfavorites} & {commonfavorites}
“收藏夾”的路徑,這個常量的使用方法是需要 MinVersion 的設置至少為“4.1, 4”,目前只有 Windows 2000 支持 {commonfavorites},如果使用的是在這之前的版本的 Windows,那么它將會被轉換成和{userfavorites} 相同的目錄。
{userprograms} & {commonprograms} *
在開始菜單裡面的程式文件夾的路徑。
{userstartmenu} & {commonstartmenu} *
開始菜單的定級路徑。
{userstartup} & {commonstartup} *
開始菜單裡面的啟動文件夾的路徑。
{usertemplates} & {commontemplates}
模板(Templates)文件夾的路徑,目前只有 Windows 2000 支持 {
commontemplates},如果使用的是在這之前的版本的 Windows ,它將會被轉換成和 {usertemplates} 相同的目錄。
其他的常量
{\}
一個反斜杠字符,請參見本頁前面提到的關於常量 {\} 和單字符 \ 在使用上有何不同的說明。
{%NAME}
內嵌一個環境變量,這個 NAME 是要使用的環境變量的名字。如果在用戶的系統當中指定的環境變量不存在,這個常量就會被一個空的字元串所替代。
{computername}
安裝程式正在營運的計算機的名稱(就是“GetComputerName”函數的返回值)。
{groupname}
用戶在安裝程式向導的選擇程式組頁選擇的程式組的名稱,這個是不同于 {group} 的,它不包括路徑。
{hwnd}
(專門用途)傳送安裝程式背景窗口的窗口句柄。
{reg:HKxx\SubkeyName,ValueName|DefaultValue}
內嵌一個註冊表值。
HKxx 指定根鍵(root key),參見 [Registry] 段 文檔所列出的根鍵。
SubkeyName 指定要讀取的子鍵的名稱。
ValueName 指定要讀取的值的名稱,要讀取一個鍵的默認值就讓 ValueName 為空。
DefaultValue 如果指定的註冊表值不存在或者它不是一個字元串類型(REG_SZ 或者 REG_EXPAND_SZ),則嵌入這個值。
如果你希望包括一個逗號,豎線(字符“|”)或大括號閉弧“}”在常量裡面,你必須透過“%-編碼” 形式用“%”后緊跟一個兩位的16進製代碼轉譯后替換原來的字符,一個逗號是“%2c”,一個豎線符是“%7c”,一個大括號閉弧是“%7d”。
DefaultValue 可以包括常量,然而,如上所訴內嵌的常量的大括號的閉弧
(“}”) 必須被改成“%7d”才可以。
{srcexe}
安裝程式的文件名全稱(包括全程路徑和文件名),例如“C:\SETUP.EXE”。
{username}
營運安裝程式的用戶的名稱(函數 GetUserName 的返回值)。
公共參數
有倆個可選的參數可以在所有的段裡面的任何項中使用,它們是︰
MinVersion
說明︰
該項處理所需的分別最低的 Windows 版本和 Windows NT 版本. 如果將某個版本號指定為 0 那么在該平台上就再也不會處理這項了,版本創建編號(Build numbers)和(或)服務包級別(Service pack levels)也可以被包括在版本號當中。這個參數將會覆蓋位于 [Setup] 段當中的 MinVersion 關鍵字。
示例︰
MinVersion: 4.0,4.0
OnlyBelowVersion
說明︰
基本上是和 MinVersion 相反,該項所指定的最低的 Windows 版本 和 Windows NT
版本將不會被處理,例如︰如果你指定了 4.1,5.0 並且用戶營運在 Windows 95 或 NT 4.0 下,那么該項將會被處理,但是如果用戶營運在 Windows 98 (報告的版本訊息是 4.1)或 Windows 2000 (報告的版本訊息是 NT 5.0),則該項就不會被處理。使用“0”表示該版本號上限的限制。版本創建編號(Build numbers)和(或)服務包級別(Service pack levels) 也可以包括在版本號當中。這個參數將會覆蓋位于 [Setup] 段當中的 OnlyBelowVersion 關鍵字。
示例︰
OnlyBelowVersion: 4.1,5.0
其它注意事項
安裝程式是按照段內的排列順序來處理所有的項的,[UninstallRun] 段是個例外,卸載時處理所有項的順序是與安裝程式相反的。
在這個示例中︰
[INI]
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Flags: uninsdeletesectionifempty
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"; Flags: uninsdeleteentry
安裝程式首先記錄下第一項的數據 uninsdeletesectionifempty 標記到卸載記錄中。創建第二項的鍵,然後記錄下 uninsdeleteentry 標記的數據到卸載記錄中,當程式被卸載時,卸載程式將首先處理 uninsdeleteentry 標記,刪除該項,然後才是 uninsdeletesectionifempty 標記。
如果安裝程式在用戶的系統中檢測到一個 Windows 共享版本,Windows 系統目錄是寫保護的,{sys} 目錄常量將會被轉變為用戶的 Windows 目錄替代系統目錄。
在命令行執行編譯器
腳本文件也可以在命令行被安裝編譯器編譯。命令行的使用方法如下︰
compiler /cc <腳本文件>
示例︰
compil16 /cc c:\isetup\sample16\sample16.iss
compil32 /cc "c:\isetup\sample32\my script.iss"
在上面列出的例子中,帶有空格的文件名必須用引號括起來。
在命令行營運安裝編譯器不支持正常的進程顯示或任何錯誤消息。如果編譯成功安裝編譯器將會返回一個退出代碼 0,如果是 1 則表示有無效的命令行參數, 2 則表明編譯失敗。
安裝命令行參數
安裝程式本身接受三個不同的可選的命令行參數,這些參數能被用于系統管理員和其他程式調用安裝程式。
/SP-
在安裝程式開始時禁止“即將安裝 ... ,繼續嗎?”的提示,當然,它將使 [Setup] 段的 DisableStartupPrompt 關鍵字設置為 yes 無效
/DIR="x:\dirname"
替換在“選擇目標文件夾”向導頁顯示的默認的目錄名,必需要指定一個全程路徑名。如果 [Setup] 段的 DisableDirPage 關鍵字被設置為 yes, 那么該命令行參數將被忽略。
/GROUP="group name"
替換在“選擇程式組”向導頁顯示的默認的程式組名,如果 [Setup] 段的 DisableProgramGroupPage 關鍵字被設置為 yes, 那么該命令行參數將被忽略。
安裝腳本段
安裝腳本段
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
其它問題︰
其它注意事項
在命令行執行編譯器
安裝命令行參數
[Setup] 段
這個段包括了安裝和卸載程式所使用的全局設置,並且有些關鍵字在你建立的安裝程式中是必須要用到的。這個是 [Setup] 段的一個示例︰
[Setup]
AppName=My Program
AppVerName=My Program version 1.4
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
下面的這些關鍵字可以被放進 [Setup] 段中去︰
(粗體字 表示是必需的)
編譯器相關
CompressLevel
DiskClusterSize
DiskSize
DiskSpanning
DontMergeDuplicateFilesOutputBaseFilename
OutputDir
ReserveBytes
SourceDir
UseSetupLdr
安裝程式相關
功能關鍵字: 這些關鍵字影響到安裝程式的操作,或是保存起來以備將來卸載時所用到。
AdminPrivilegesRequired
AllowNoIcons
AllowRootDirectory
AlwaysCreateUninstallIcon
AlwaysRestart
AlwaysUsePersonalGroup
AppName
AppId
AppMutex
AppPublisher
AppPublisherURL
AppSupportURL
AppUpdatesURL
AppVersion
AppVerName
ChangesAssociations
CreateAppDir
CreateUninstallRegKey
DefaultDirName
DefaultGroupName
DirExistsWarning
DisableAppendDir
DisableDirPage
DisableFinishedPage
DisableProgramGroupPage
DisableStartupPrompt
EnableDirDoesntExistWarning
ExtraDiskSpaceRequired
InfoAfterFile
InfoBeforeFile
LicenseFile
MessagesFile
MinVersion
OnlyBelowVersion
Password
Uninstallable
UninstallDisplayIcon
UninstallDisplayName
UninstallFilesDir
UninstallIconName
UninstallLogMode
UpdateUninstallAppName
UsePreviousAppDir
UsePreviousGroup
外觀界面關鍵字︰這些關鍵字決定了安裝程式的外觀樣式。
AppCopyright
BackColor
BackColor2
BackColorDirection
BackSolid
WindowShowCaption
WindowStartMaximized
WindowResizable
WindowVisible
WizardImageBackColor
WizardImageFile
廢棄的
Bits
DisableDirExistsWarning
OverwriteUninstRegEntries
[Dirs] 段
這個段是可選的,而且通常對于大多數簡單的應用程式來書不是必需的。這個段是用來創建除用戶選擇的應用程式目錄以外的其它的附加的目錄,它是被自動創建的。這個段所創建的子目錄是可以脫離主應用程式而共同使用的目錄。當然在 [Files] 段裡面的文件被複製到某個目錄之前你並不一定要創建它,然而在卸載程式的時候在 [Dirs] 和 [UninstallDelete] 段裡面沒有指定的目錄就不會被刪除。
這是一個 [Dirs] 段的示例︰
[Dirs]
Name: "{app}\data"
Name: "{app}\bin"
上面的示例演示了在安裝程式的應用程式目錄被創建之后,在應用程式的下面建立兩個子目錄。
下面列出了支持的參數︰
Name (必需的)
說明︰
要被建立的目錄的名稱,通常它以一個目錄常數開始。
示例︰
Name: "{app}\MyDir"
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
deleteafterinstall
告訴安裝程式象平常一樣建立目錄,但是當安裝程式結束(或被中止)之后這個目錄是空的情況下將這個目錄刪除。如果釋放腳本的 [Run] 段所執行的程式所需要的臨時的數據時這個選項是很有用的。
uninsalwaysuninstall
告訴卸載程式試圖刪除這個目錄而不管它是不是空的。通常卸載程式只會嘗試刪除在安裝之前不存在的目錄。
uninsneveruninstall
告訴卸載程式不要去刪除這個目錄。在默認情況下,在 [Dirs] 段裡面指定的目錄如果是空的卸載程式就會嘗試將其刪除。
示例︰
Flags: uninsneveruninstall
公共參數
[Files] 段
這個段是可選的,但對于大多數安裝程式來說是必不可少的。在這裡定義了安裝程式需要複製到用戶的系統當中的全部文件。
在安裝期間,卸載程式和數據被自動的複製到應用程式的目錄當中去,因此你不必手工的將它們添加到 [Files] 段。
這是一個 [Files] 段的示例︰
[Files]
Source: "CTL3DV2.DLL"; DestDir: "{sys}"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.HLP"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
下面列出了支持的參數︰
Source (必需的)
說明︰
“源文件”的名稱,如果沒有提供全程路徑時編譯器會根據安裝程式的源目錄的路徑預先設定號路徑。
允許通配符,根據通配符可以在一項裡面簡單的指定一組文件。當使用了通配符的時候,所有匹配的文件使用相同的可選項。
當標記(flag) external 被指定的時候,Source 必須是一個在發布介質或用戶的系統中已經存在的文件(或帶有通配符)的全程路徑。(例如“{src}\license.ini”).
示例︰
Source: "MYPROG.EXE"
DestDir (必需的)
說明︰
這個是文件將要被安裝到用戶的系統當中去的目錄。它幾乎總是以一個目錄常量開始的。如果指定的路徑不存在于用戶的系統中,它將會被自動的創建。
示例︰
DestDir: "{app}"
DestName
說明︰
這個常數為將要安裝到用戶的系統中的文件指定一個新的名字。在默認的情況下,安裝程式使用的是同 Source 參數一樣的文件名,因此在多數情況下不需要指定該參數。
示例︰
DestName: "MYPROG2.EXE"
CopyMode
默認︰
normal
說明︰
“複製模式”,指定文件複製的規則,必須是下列規則之一。
normal
這是最常使用的選項。如果文件已經存在于用戶的系統當中並且比要複製的文件的版本更新時(由文件的版本訊息決定),安裝程式將會向用戶提出詢問是否要替換掉已經存在的文件。如果已經存在的文件不包含文件的版本訊息,它將會被覆蓋而不會向用戶詢問。
參見這個標題下面的注意中關於版本檢查的重要說明。
onlyifdoesntexist
只有當用戶的系統中的文件不存在時才複製文件。
alwaysoverwrite
總是覆蓋已經存在的文件,甚至如果已經存在的文件比被安裝的文件的版本更新的情況下也是如此。對于共享的系統文件永遠也不要這樣做﹗
alwaysskipifsameorolder
類似于 normal, 不同之處是如果遇到已經存在的文件不會向用戶提出詢問。當這個模式被使用時,更新的一經存在的文件時從來不會被替換的。
示例︰
CopyMode: normal
Attribs
說明︰
為文件指定附加的“屬性”,它可以包括一個或多個屬性,它們是︰readonly, hidden, system. 如果沒有指定這個參數,安裝程式不會給文件指派任何特殊的屬性。
示例︰
Attribs: hidden system
FontInstall
說明︰
告訴安裝程式需要被安裝的文件是一個字體文件,該值是被保存到註冊表或 WIN.INI 文件中的字體名稱,這個名稱必須嚴格地和在資源管理器中雙擊字體文件看到的名稱相對應。注意,安裝程式會自動的在字體名稱的末尾加上“(TrueType)”。
如果這個字體文件不是一個 TrueType 字體,你必須在 Flags 參數中指定 fontisnttruetype 標記。
建議在安裝字體到 {fonts} 目錄的時候使用複製模式參數 onlyifdoesntexist 和標記(flag)參數 uninsneveruninstall.
示例︰
Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
comparetimestampalso
(專門用途)如果要被複製到用戶系統的文件已經存在于用戶的系統當中並且它們具有相同的版本訊息,告訴安裝程式進行時間戳(文件的日期時間屬性)的比較。在正常情況下安裝程式不會覆蓋已經存在的文件,但是當使用了這個標記的時候,如果已存在的文件的時間戳比它的版本訊息還要舊,安裝程式在安裝文件時就會覆蓋它。當複製模式不是 normal 或 alwaysskipifsameorolder 這兩者之一時該標記不起作用。
confirmoverwrite
當文件已經存在每個文件在複製之前始終向用戶提出詢問。
deleteafterinstall
告訴安裝程式象平常一樣複製文件,但是當安裝程式結束(或被中止)之后將這個文件刪除。如果釋放腳本的 [Run] 段所執行的程式所需要的臨時的數據時這個選項是很有用的。
此標記不能和下列標記在一起組合使用︰ isreadme, regserver, regtypelib, restartreplace, sharedfile, uninsneveruninstall.
external
此標記告訴 Inno Setup 不要將由 Source 參數指定的文件編譯進安裝程式文件中,在複製文件的時候由發布介質或用戶的系統中已經存在文件代替。要獲得更多詳細的訊息請參見 Source 參數的說明。
fontisnttruetype
如果 FontInstall 參數指定的是一個 非 TrueType 字體則使用此標記。
isreadme
該文件是“自述(README)”文件,安裝程式中只有一個文件能夠使用此參數。當有一個文件使用了這個參數時,用戶將被詢問是否願意在安裝程式結束時查看自述文件,如果選擇了是,安裝程式將會根據文件的類型用默認的程式打開這個文件,基于這個原因,自述文件應該具有象 .txt, .wri 或 .doc. 這樣的擴展名。
注意如果安裝程式要重新啟動用戶的計算機(比如安裝了一個帶有 restartreplace 參數的文件或在 [Setup] 段中的 AlwaysRestart
關鍵字的值為 yes),安裝程式就不會向用戶詢問是否要查看自述文件。
overwritereadonly
始終覆蓋一個只讀 (read-only) 文件,如果沒有這個參數,當一個已存在的只讀文件要被覆蓋時安裝程式將會詢問用戶。
regserver
註冊 OLE 伺服器 (或稱作 ActiveX 控件)。如果設置了此標記,安裝程式將查找並執行 DLL/OCX 的 DllRegisterServer 輸出,卸載程式調用 DllUnregisterServer. 當結合 sharedfile 標記一起使用,只有參照技術器的值歸零時 DLL/OCX 才可能百取消登記 (unregistered).
要獲得更多的詳細訊息請參見此標題最後的 注意。
regtypelib
註冊類型庫 (.tlb). 卸載程式將會取消註冊類型庫 (除非指定了 uninsneveruninstall 標記). 就像 regserver 標記那樣,如果結合 sharedfile 標記一起使用,這個文件只有參照計數器的值歸零時才可能被卸載。
要獲得更多的詳細訊息請參見此標題最後的 注意。
restartreplace
此標記通常用于替換系統核心文件。如果文件已經預先存在並發現它已經被鎖定結果導致安裝程式無法替換該文件,安裝程式就會註冊此文件(對于 Windows 和 Windows NT 分別使用 WININIT.INI 和函數 MoveFileEx)在下次啟動系統時被替換。當遇到這種情況,在安裝過程結束時用戶將被提示重新啟動計算機。
要保持 Windows95/98 和 3.1 的兼容性,使用了此標記的項不應該使用長文件名,只能支持“8.3”格式的文件名。(Windows NT 和 2000 則沒有此限制。)
重要提示︰在 Windows NT/2000 下只有當用戶具有管理員權限時使用 restartreplace 標記才可以成功的替換使用中的文件。如果用戶沒有管理員權限,將會顯示如下的訊息︰“RestartReplace failed: MoveFileEx failed; code 5.”,因此,當使用 restartreplace 標記時強烈建議讓你的安裝程式需要管理員權限,在 [Setup] 段裡面設置 "AdminPrivilegesRequired=1"。
sharedfile
(僅 Windows 95/NT 4+) 使用 Windows 的共享文件計數功能 (位于註冊表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \SharedDLLs). 這樣會使應用程式之間能夠共享一個文件,不用擔心在不注意的情況下會刪除文件。在每次安裝共享文件的時候,與這個文件相對應的“參照計數器”的值就會加一,而每次應用程式被卸載的時候,參照計數器的值就會減一,如果參照計數器的值歸零的時候,該共享文件就會被刪除(在用戶確認的情況下)。
絕大多數被安裝到 Windows 系統目錄下的文件都應當使用這個標記,包括 .OCX 和 .DPL (Delphi 3 package)文件。不使用這個標記的僅有的一個例外是 MFC DLLs. 作為替代,應該在複製模式中使用 onlyifdoesntexist ,並結合 uninsneveruninstall 標記,或者是如果安裝單獨發布的 MFC DLL 的最近的版本,則使用複製模式 alwaysskipifsameorolder ,並結合使用標記 uninsneveruninstall 和 restartreplace.
當安裝程式被營運在一個 NT 3.51 系統時,被安裝的帶有此標記的文件就再也不會被刪除了。
skipifsourcedoesntexist
只有當 external 標記也使用了的時候這個標記才會有用。它會告訴安裝程式如果源文件不存在的話則無任何提示的(靜靜的)跳過該項,如果沒有使用這個標記則會顯示一個錯誤消息。
uninsneveruninstall
從來不會卸載這個文件。此標記應當被保守地使用,而且通常它是和複製模式 onlyifdoesntexist 在一起結合使用。意思是用于安裝一個特別公共的共享文件,就像 CTL3DV2.DLL 或者一個 MFC DLL, 你不應該用卸載程式去刪除這個文件的原因是以後其它的應用程式也要使用到它。
示例︰
Flags: isreadme
公共參數
注意
如果安裝程式正在安裝一個已經存在于用戶的系統當中的 16 位的 DLL 或者 EXE 文件,兩個文件的版本訊息是不會相比較的,已存在的文件將始終被覆蓋(除非當複製模式的參數是 onlyifdoesntexist),這是由一個 Windows 的限制決定的,32 位的程式就像 Inno Setup 只能讀取 32 位可執行文件的版本訊息。
在安裝程式的最後一步安裝程式會註冊所有的帶有 regserver 或 regtypelib 標記的文件。然而,如果 [Setup] 段關鍵字 AlwaysRestart 的值是 yes, 或如果有文件帶有 restartreplace 標記,全部的文件將會在下次啟動的時候註冊(在 Windows 註冊表的 RunOnce 創建一項)。
當帶有 .HLP 擴展名(Windows 的幫助文件)的文件被卸載的時候,其對應的 .GID 和 .FTS 文件同樣會被自動刪除。
[Icons] 段
這個段是可選的,但對于大多數安裝程式來說是必不可少的。它定義了所有的安裝程式要在用戶系統中創建的程式管理器/開始菜單的圖標。它也能被用來在其它的位置創建應用程式圖標(快捷模式),比如就像桌面。
卸載圖標是由安裝程式內部創建的,這樣一來你就不需要在 [Icons] 段裡面手工的添加它。默認情況下,安裝程式營運在 Windows 95/NT 4+ 的時候是不創建卸載圖標的 除了安裝程式營運于 Windows NT 3.51 的時候。 要強製創建一個卸載圖標,請使用 [Setup] 段裡面的 AlwaysCreateUninstallIcon 關鍵字。
段的一個示例︰
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}"
下面列出了支持的參數︰
Name (必需的)
說明︰
要創建的應用程式圖標的名稱和位置。此參數可以使用任何任何“外殼文件夾常量”和“目錄常量”。
注意︰ 記住 Windows 95/NT 4+ 的應用程式圖標是作為文件直接存儲的,這樣一來普通文件所不允許使用的字符都不能用來作為應用程式圖標的名稱。
示例︰
Name: "{group}\My Program"
Name: "{group}\Subfolder\My Program"
Name: "{userdesktop}\My Program"
Name: "{commonprograms}\My Program"
Filename (必需的)
說明︰
應用程式圖標的命令行文件名,它通常以一個目錄常量開始。
示例︰
Filename: "{app}\MYPROG.EXE"
Parameters
說明︰
應用程式圖標的可選的命令行參數,可以包括常量,在 Windows 95/NT 4+ 下營運時才可以包括引號。
示例︰
Parameters: "/play filename.mid"
WorkingDir
說明︰
應用程式圖標的工作目錄,應用程式啟動的那個目錄,如果沒有指定該參數或該參數是空的,Windows 將使用一個默認的路徑,它隨著 Windows 的版本的不同而改變。這個參數可以包括常量。
示例︰
WorkingDir: "{app}"
Comment
說明︰
指定快捷模式的“註釋”(或“描述”)欄的內容,它決定了在 Windows 2000 下的彈出訊息,早期的 Windows 版本忽略這個註釋。
示例︰
Comment: "This is my program"
IconFilename
說明︰
要被顯示的一個自定義的應用程式圖標(位于用戶的系統中)的文件名。它可以是一個包含圖標的可執行文件映像 (.exe, .dll) 或一個 .ico 文件。如果沒有指定該參數或該參速是空的,Windows 將會使用文件的默認圖標。這個參數可以包括常量。
示例︰
IconFilename: "{app}\myicon.ico"
IconIndex
默認︰
0
說明︰
由 IconFilename 指定的文件的以零開始的圖標索引。
示例︰
IconIndex: 0
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
closeonexit
當設置了此標記時,安裝程式將設置快捷模式的“退出時關閉”屬性。這個標記僅對基于 MS-DOS 的應用程式有效 (具體說就是是否具有 .pif 擴展名)。如果這個標記和 dontcloseonexit 標記都沒有指定,安裝程式就不會去改變“退出時關閉”的屬性。
createonlyiffileexists
當設置了此標記時,安裝程式只創建已存在的由 Filename 參數指定的文件的應用程式圖標。
dontcloseonexit
類似于 closeonexit, 只是會導致安裝程式不選定“退出時關閉”屬性。
runmaximized
當設置了此標記時,安裝程式將應用程式圖標的“營運模式”設置為“最大化”,這樣當程式被啟動時以最大化的模式初始化。當安裝在 Windows NT 3.51 上時該標記不起作用。
runminimized
當設置了此標記時,安裝程式將應用程式圖標的“營運模式”設置為“最小化”,這樣當程式被啟動時以最小化的模式初始化。
uninsneveruninstall
告訴卸載程式不要刪除這個應用程式圖標。
useapppaths
當設置了此標記時,在 Filename 參數裡僅指定沒有路徑的文件名,以後安裝程式將會從註冊表的 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" 鍵裡面自動得到預先設定好的對應該文件名的路徑名。
示例︰
Flags: runminimized
公共參數
[INI] 段
此段時可選的,它定義了一些 .INI 文件項,在文件被複製以後安裝程式在用戶的系統中的設定。
這是 [INI] 段的一個示例︰
[INI]
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Flags: uninsdeletesection
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"
下面列出了支持的參數︰
Filename (必需的)
說明︰
你想要安裝程式修改的 .INI 文件的文件名,它可以包括常量。如果這個參數時空的,它將寫入系統的 Windows 目錄的 WIN.INI 文件。
示例︰
Filename: "{win}\MYPROG.INI"
Section (必需的)
說明︰
要被創建的段的名稱,可以包括常量。
示例︰
Section: "Settings"
Key
說明︰
要被設定的鍵的名稱,可以包括常量。如果沒有指定這個參數或這個參數是空的就不會創建任何鍵。
示例︰
Key: "Version"
String
說明︰
賦給鍵的值,可以使用常量。如果沒有指定該參數不會創建該鍵。
示例︰
String: "1.0"
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
createkeyifdoesntexist
只有該鍵不存在是才能給改建賦值。
uninsdeleteentry
程式被卸載時刪除該項,它可以結合 uninsdeletesectionifempty 標記一起使用。
uninsdeletesection
當程式被卸載時,刪除該項所在的整個段。對于由 Windows 本身使用的段(例如一些在 WIN.INI 中的段)來說這明顯不是一個好的主意,你應當將它用到自己的應用程式中的段。
uninsdeletesectionifempty
類似于 uninsdeletesection, 但是只能在該段中沒有了鍵的時候才能刪除。它可以結合 uninsdeleteentry 標記一起使用。
示例︰
Flags: uninsdeleteentry
公共參數
[InstallDelete] 段
它使用的是和 [UninstallDelete] 段相同的格式,不同的是它是在安裝程式的第一步被處理的。
[Messages] 段
[Messages] 段是用于定義安裝程式和卸載程式所顯示的消息。通常你不需要在你的腳本文件裡面創建 [Messages] 段,默認情況下所有的顯示消息都由 Inno Setup 包含的文件 Default.isl 定義。 (或由 [Setup] 段的關鍵字 MessagesFile 指定的任何文件).
然而,單獨的消息可以被你的腳本中創建的 [Messages] 段覆蓋。要這么做,首先你需要知道你要改變的消息的標識 (ID),在搜索 Default.isl 文件時能很容易的發現。例如,你想要改變安裝向導的按鈕 “下一步(&N)” 為 “向前(&F)”,該消息的標識為“ButtonNext”,那么你應該象這樣創建 [Messages] 段︰
[Messages]
ButtonNext=&Forward >
有些消息帶有象 %1 和 %2 這樣的參數,你可以重新排列參數的順序(例如將 %2 移到 %1 的前面)並且如果需要的話可以重複使用參數(例如“
%1 ... %1 %2”)。在帶有參數的消息中,使用兩個連續的“%”代替一個嵌入的“%”,“%n”創建一個換行。
如果你希望將 Inno Setup 的文本翻譯成其他語言修改並替換文件 Default.isl 或在你創建的腳本裡面覆蓋每個消息,做一個 Default.isl 的副本並另起一個名字就像 MyTranslation.isl. 在你要使用 MyTranslation.isl 的任何安裝程式中,簡單的將 [Setup] 段中的關鍵字 MessagesFile 指向該文件。
特殊用途的標識
有幾個 [Messages] 段的項實際上不是用于在螢幕上顯示的,它們是用于在安裝程式中指定所使用的字體和字型號的。這些可選項中的每一個都有一個前導下劃線字符 (“_”) 開始,請參閱 Default.isl 文件頭部的註釋的使用方法示例。
[Registry] 段
這個段是可選的,他定義了一些註冊表項,用于在複製完文件之后創建在用戶的系統中。
下面是 [Registry] 段的一個示例。
[Registry]
Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company\My Program"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
下面列出了支持的參數︰
Root (必需的)
說明︰
根鍵,必須是下列各項之一︰
HKCR (HKEY_CLASSES_ROOT)
HKCU (HKEY_CURRENT_USER)
HKLM (HKEY_LOCAL_MACHINE)
HKU (HKEY_USERS)
HKCC (HKEY_CURRENT_CONFIG)
示例︰
Root: HKCU
Subkey (必需的)
說明︰
子鍵名稱,可以包括常量。
示例︰
Subkey: "Software\My Company\My Program"
ValueType
說明︰
鍵值的數據類型,必須是下列各項之一︰
none
string
expandsz
multisz
dword
binary
如果指定了 none (默認設置),安裝程式將創建一個沒有鍵值的鍵,在這種情況下將忽略 ValueName 和 ValueData 參數。
如果指定了 string,安裝程式將創建一個字元串 (REG_SZ) 值。
如果指定了 expandsz,安裝程式將創建一個擴展字元串 (REG_EXPAND_SZ) 值。這種數據類型主要用在 Windows NT 上,但是也支持 Windows 95/98.
如果指定了 multisz,安裝程式將創建一個多行文本 (REG_MULTI_SZ) 值。
如果指定了 dword,安裝程式將創建一個整數 (REG_DWORD) 值。
如果指定了 binary,安裝程式將創建一個二進製 (REG_BINARY) 值。
示例︰
ValueType: string
ValueName
說明︰
要創建的鍵值的名稱,可以包含常量。如果它是空的,將會寫入“默認”(Default)值中。如果ValueType 參數被設置為 none, 該參數將被忽略。
示例︰
ValueName: "Version"
ValueData
說明︰
鍵值的數據。如果 ValueType 參數是 string, expandsz 或 multisz, 該參數是一個可以包含常量的字元串。如果數據類型是 dword, 該參數可以是一個十進製整數(例如“123”)或者是一個十六進製整數(例如“$7B”)。如果數據類型是 binary, 這是一個十六進製位元組序列的形式︰“00 ff 12 34”。如果數據類型是 none, 該參數被忽略。
對于一個 string, expandsz 或者 multisz 類型的鍵值,在這個參數中你可以使用一個特殊的叫做 {olddata} 的常量。{olddata} 常量代表的是註冊表鍵值原來的數據。如果你想要添加一個字元串到一個已經存在的鍵值時 {olddata} 常量時很有用的,例如,{olddata};{app}.如果該鍵值並不存在或者不是一個字元串類型,這時 {olddata} 常量會被默默地刪除。如果正要被創建的鍵值是 multisz 類型,但是已經存在的鍵值並不是多行文本 (例如它是 REG_SZ 或 REG_EXPAND_SZ )類型,這時 {olddata} 常量也會被默默地刪除,反之亦然。
對于一個 multisz 類型的鍵值,在這個參數中你可以使用一個特殊的叫做 {break} 的常量來嵌入換行(nulls)。
示例︰
ValueData: "1.0"
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
createvalueifdoesntexist
當指定了此標記時,只有當相同名稱的鍵值不存在時安裝程式才會創建該鍵值。如果數據類型是 none ,或者同時指定了 deletevalue 標記將忽略該標記。
deletekey
當指定了此標記時,如果該項已存在,安裝程式會首先嘗試去刪除它,包括其中的鍵值和子鍵,然後如果 ValueType 不是 none 的話它將創建一個新的鍵和鍵值。
deletevalue
當指定了此標記時,如果該鍵值已存在,安裝程式會首先嘗試刪除該鍵值。然後如果 ValueType 不是 none ,並且該鍵不存在時它將創建該鍵和新的鍵值。
dontcreatekey
當指定了此標記時,如果該鍵不存在于用戶的系統中安裝程式將不會試圖創建該鍵或任何鍵值。如果改建不存在將不顯示錯誤消息。
典型地該標記同 uninsdeletekey 標記結合使用,以便在安裝時沒有創建該鍵時確保在卸載期間刪除該鍵。
noerror
如果安裝程式在創建鍵或鍵值時無論什麼原因失敗不顯示錯誤消息。
preservestringtype
該標記只用于 ValueType 參數為 string 或 expandsz 時。當指定了此標記並且該鍵值不存在或者已存在的鍵值不是字元串類型(REG_SZ 或 REG_EXPAND_SZ) 時,該項將由 ValueType 指定的類型創建,如果該鍵值存在並且是一個字元串類型,該項將由與預先存在的鍵值相同的鍵值類型替代。
uninsclearvalue
當程式被卸載時,將設置該鍵值的數據為空的字元串 (類型 REG_SZ). 該標記不能同 uninsdeletekey 標記一起使用。
uninsdeletekey
當程式被卸載時,刪除整個鍵,包括其下全部的鍵值和子鍵。對于由 Windows 自身使用的鍵來說使用該標記明顯不是一個好的主意,你應當將該標記應用到你自己的應用程式鍵中。
uninsdeletekeyifempty
當程式被卸載時,如果該鍵下沒有其它鍵值和子鍵則將其刪除。該標記可以結合 uninsdeletevalue 標記一起使用。
uninsdeletevalue
當程式卸載時刪除該鍵值,該標記可以結合 uninsdeletekeyifempty 標記一起使用。
注意︰對于 Inno Setup 1.1 之前的版本,你可以與 none 數據類型一起使用該標記則將會成為 “delete key if empty” (如為空則刪除該鍵)功能的標記。這個技巧現下已經不在被支持,你必須使用 uninsdeletekeyifempty 標記來實現該功能。
示例︰
Flags: uninsdeletevalue
公共參數
[Run] & [UninstallRun] 段
[Run] 段是可選的,指定任意數量的程式在成功安裝程式以後及顯示結束對話框之前被執行。同樣 [UninstallRun] 段也是可選的,指定任意數量的程式在“卸載程式”的第一步時被執行。除非下面有其它說明,兩個段共有相同的語法。
每個程式按照你的腳本編排的順序被執行,當出路 [Run]/[UninstallRun] 的項時,安裝程式將會等到當前的程式終止之后才處理下一個,當然除非使用了 nowait 標記。
這是一個 [Run] 段的示例。
[Run]
Filename: "{app}\INIT.EXE"; Parameters: "/x"
下面列出了支持的參數︰
Filename (必需的)
說明︰
要被執行的程式,或要被打開的文件/文件夾。如果 Filename 不是一個 .exe 或 .com 文件,你必須在該項中使用 shellexec 標記。該參數可以包含常量。
示例︰
Filename: "{app}\INIT.EXE"
Parameters
說明︰
程式可選的命令行參數,該參數可以包含常量。
示例︰
Parameters: "/x"
WorkingDir
說明︰
程式起始位置的目錄。如果沒有指定該參數或該參數是空的,將不會改變任何特殊的目錄。該參數可以包含常量。
示例︰
WorkingDir: "{app}"
RunOnceId
說明︰
只在 [UninstallRun] 段裡面有效。如果相同的應用程式被安裝超過了一次,“run”項將會重複出現下卸載記錄文件裡面。透過將一個字元串賦值給 RunOnceId, 你可以確保一個獨特的 [UninstallRun] 項在卸載期間只被執行一次。例如,如果在卸載記錄中的“run”中有兩個或者更多的帶有 RunOnceId 參數並被設置為“DelService”的項,則只有最後一個帶有一個 RunOnceId 參數並被設置為“DelService”的項會被執行。其餘的將被忽略。注意 RunOnceId 參數是大小寫敏感的。
示例︰
RunOnceId: "DelService"
Flags
說明︰
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項︰
nowait
如果指定了該標記,將不會等待該項處理被結束營運之前就進行到下一個 [Run] 項,或者結束安裝程式。不能結合 waituntilidle
標記一起使用。
shellexec
如果 Filename 不是一個可以直接執行的文件(一個 .exe 或 .com 文件)則該標記是必需的。當設置了該標記時,Filename 可以是一個文件夾或者任何已註冊的文件類型 包括 .hlp, .doc 等等。文件將會被用戶系統中的與該文件類型相關聯的應用程式打開,就像用戶在資源管理器中用鼠標雙擊該文件一樣。
當在 Filename 中使用一個文件夾名稱時,建議在后面加上一個反斜杠字符(例如“{group}\”),以確保可能有相同名稱的程式不會被執行。同樣要注意文件夾只能在 Windows 95/NT 4+ 上被打開,因為從那時起使用了一個新的資源管理器的外殼。
使用 shellexec 標記有一個缺點,那就是無法等待該過程結束,因此,它始終就像被指定了 nowait 標記一樣操作。
skipifdoesntexist
如果指定了該標記,如果 Filename 不存在安裝程式將不會顯示錯誤消息。它只適用于 [Run] 段,因為卸載程式從來不顯示錯誤消息在 [UninstallRun] 項執行失敗時。
runmaximized
如果指定了該標記,將會在一個最大化的窗口啟動程式或文檔。
runminimized
如果指定了該標記,將會在一個最小化的窗口啟動程式或文檔。
waituntilidle
如果指定了該標記,它將暫停直到該過程正在等待用戶的輸入並且沒有未決的輸入時,取而代之的是等待該過程的結束。(該標記調用 WaitForInputIdle Win32 函數.) 不能結核 nowait 一起使用。
示例︰
Flags: nowait
公共參數
[UninstallDelete] 段
該段是可選的。該段是用來定義一些附加的除了那些被安裝的應用程式之外的要被卸載程式刪除的文件或目錄。使用該段來刪除由你的應用程式創建的 .INI 文件是一個常用的辦法。卸載程式在卸載過程的最後一步處理這些項。
這是一個 [UninstallDelete] 段的示例︰
[UninstallDelete]
Type: files; Name: "{win}\MYPROG.INI"
下面列出了支持的參數︰
Type (必需的)
說明︰
指出要被卸載程式刪除的是什麼。必須是下列之一︰
files
Name 參數指定的是一個具體的文件的名稱,或者是一個帶有通配符的文件名。
filesandordirs
功能上類似于 files ,但是它還可以匹配目錄名稱,並且任何名稱匹配的目錄包括其中所有的文件和子目錄都會被刪除。
dirifempty
當使用它時,Name 參數必須是一個目錄的名稱,但是它不能包括通配符。只有在不包含任何文件和子目錄的情況下該目錄才能被刪除。
示例︰
Type: files
Name (必需的)
說明︰
要被刪除的文件或目錄的名稱。
注意︰不要試圖透過在這裡使用通配符去刪除 {app} 目錄下的全部文件,我強烈建議你不要這樣做的原因由兩個,首先,用戶通常不會意識到可能還有他們放進應用程式目錄中的數據文件將要被刪除而不會得到警告(例如他們可能卸載應用程式只是為了要將它轉移到一個不同的驅動器)。最好是將其保留一直到最後用戶想要刪除時用手工的方法刪除;還有,如果由於用戶的失誤碰巧將程式安裝到了一個錯誤的目錄當中(例如 C:\WINDOWS)而這時去卸載它勢必結果會損失慘重。再次聲明,千萬不要這么做﹗
示例︰
Name: "{win}\MYPROG.INI"
公共參數
編譯器相關
[Setup]: Bits
有效值︰ 32
說明︰
1.3 版本以後已廢棄。 1.3 以前的版本的 Inno Setup 有一個 16 位的版本,編譯器將檢查 Bits 關鍵字以判斷是否使用了正確的編譯器來編譯腳本。以後 Inno Setup 的更新的版本只有 32 位的版本可用,你將不再需要設置該關鍵字。無論什麼時候如果 Bits 被設置為“16”,編譯器都將會失敗並提示一個錯誤消息。
[Setup]: UseSetupLdr
有效值︰ yes 或 no
默認值︰ yes
說明︰
告訴安裝程式編譯器要創建的安裝程式的類型,如果是 yes, 將把所有的安裝程式數據編譯成一個單獨的 SETUP.EXE (如果你願意也可以重新命名為任何名稱)。如果是 no, 將把安裝程式數據編譯成至少三個文件︰SETUP.EXE, SETUP.0 和 SETUP.1. 你想使用 no 的僅有的理由大概是為了調試的目的。
注意︰不要在一個使用了多磁片生成(DiskSpanning=yes)的安裝程式中使用 UseSetupLdr=no,當 UseSetupLdr 是 yes 時,安裝程式被複製到用戶的臨時 (TEMP) 目錄並在那裡營運,這不會發生在 UseSetupLdr 是 no 的情況下,如果 Windows 試圖去在磁片上尋找 setup.exe 文件卻不能找到,因為在驅動器中的是一個不同的磁片,所以會產生錯誤的結果。
[Setup]: BackColor, BackColor2
有效值︰ 一個值形如 $bbggrr, 這裡的 rr, gg 和 bb 指定了兩位的亮度值(以十六進製表示)分別為紅色,綠色和藍色。或者也可以是下列預定義的顏色名稱之一︰clBlack(黑色),clMaroon(暗紅),clGreen(綠色),clOlive(橄欖綠),clNavy(深藍),clPurple(紫色),clTeal(深青),clGray(灰色),clSilver(淺灰),clRed(紅色),clLime(淺綠),clYellow(黃色),clBlue(藍色),clFuchsia(紫紅),clAqua(青綠),clWhite(白色)。
默認值︰ BackColor 為 clBlue,
BackColor2 為 clBlack
說明︰
BackColor 關鍵字自定的顏色被用在安裝程式窗口背景漸變色的上面(或左面,如果 BackColorDirection=lefttoright),BackColor2 指定的顏色被用在下面(或右面)。
如果 BackSolid=yes 則 BackColor2 的設置被忽略。
示例︰
BackColor=clBlue
BackColor2=clBlack
BackColor=$FF0000
BackColor2=$000000
[Setup]: BackColorDirection
有效值︰ toptobottom 或 lefttoright
默認值︰ toptobottom
說明︰
決定了安裝程式窗口的背景漸變色的漸變方向,如果 BackColorDirection 是 toptobottom, 將自上而下繪出,如果是 lefttoright, 將從左到右繪出。
[Setup]: BackSolid
有效值︰ yes 或 no
默認值︰ no
說明︰
它決定了安裝程式窗口的背景色是使用單一顏色還是漸變色,如果是 yes, 背景色會是一單一顏色(顏色由 BackColor 指定,忽略 BackColor2)。
[Setup]: AppName
說明︰
這個必需的關鍵字指定了你正在安裝的應用程式的標題。不要包含版本號,那樣應該使用 AppVerName 關鍵字。AppName 在安裝程式的全部過程始終被顯示,位于安裝程式螢幕的左上角和向導中。
示例︰ AppName=My Program
[Setup]: AppVerName
說明︰
這個必需的關鍵字的值應該和 AppName 的值相同(或相似),但是它還應當包含程式的版本號。
示例︰ AppVerName=My Program version 3.0
[Setup]: AppId
默認值︰ 如果沒有指定 AppId 或者它是空值,編譯器將會把 AppName 的值作為 AppId 來使用。
說明︰
AppId 的值是被存儲在卸載記錄文件 (unins???.dat)裡面的,以便隨后的安裝程式檢查后決定是否可以被添加到一個特定的已存在的卸載記錄,安裝程式只有在已存在的卸載記錄中的 AppId 和當前的安裝程式的 AppId 相同是才能添加到卸載記錄。舉一個實際的例子,比方說你右兩個安裝程式,一個叫做《我的程式》而另外一個叫做《我的程式 1.1 升級版》,要想把《我的程式 1.1 升級版》添加到《我的程式》的卸載記錄中,你應該設置兩個安裝程式的 AppId 為相同的值。
AppId 還決定了卸載註冊表鍵的實際名稱,被 Inno Setup 在其末尾附加上“_is1”(因此,如果 AppId 是 “MyProgram”,那么這個鍵將會被命名為“MyProgram_is1”)。Inno Setup 的早于 1.3 的版本的鍵的名稱是基于 AppVerName 的值的。
無論什麼時候 AppId 都不會被顯示出來,因此你要求非常隱諱的感覺很輕鬆。
示例︰ AppId=MyProgram
[Setup]: AppMutex
說明︰
如果用戶要為當前的應用程式升級為新的版本,然而當前的應用程式正在營運,該關鍵字就是用來防止這類事情的發生的,而且它也可以防止用戶卸載正在營運的應用程式。它指定了一個或多個同名互斥體的名稱(多個互斥體用逗號隔開),安裝程式和卸載程式將會在啟動時檢查,如果存在,安裝程式/卸載程式將顯示如下的訊息︰“[安裝程式或卸載程式] 檢測到 [應用程式] 現下正在營運。請立即關閉它的全部實例,然後單機‘確定’繼續,或者‘取消’退出。”
如果你要使用這個關鍵字就必須在你的應用程式中以該關鍵字指定的名稱添加一個同名的互斥體。例如在 Delphi 和 C 中創建如下顯示的同名互斥體,該代碼應該在應用程式啟動是被執行。
Delphi:
CreateMutex(nil, False, ’MyProgramsMutexName’);
C:
CreateMutex(NULL, FALSE, "MyProgramsMutexName");
並不是必需在應用程式被結束之前顯示的銷毀同名互斥體對象,系統會自動完成此功能,也不推薦你這樣做,因為理想狀態下同名互斥體對象必須存在直到進程被完全終止。
注意在 Windows 下同名互斥體是大小寫敏感的。
要想獲得有關同名互斥體的更多訊息請參閱 MS SDK 幫助的 CreateMutex 主題。
示例︰ AppMutex=MyProgramsMutexName
[Setup]: AppCopyright
說明︰
可選的,它只是用來在安裝程式螢幕的右下角顯示一個版權消息。
示例︰ AppCopyright=Copyright ? 1997 My Company, Inc.
[Setup]: AppPublisher, AppPublisherURL, AppSupportURL, AppUpdatesURL, AppVersion
說明︰
所有這些關鍵字都是用來在 Windows 2000 的控制面板“添加/刪除程式”的“支持”對話框中顯示一些訊息。這些設置是可選的,並且在早期的 Windows 版本中是沒有作用的。
示例︰
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.mycompany.com/
AppVersion=1.5
[Setup]: DefaultDirName
說明︰
這是個必需的關鍵字,該值是默認的目錄名稱,用于“選擇目錄頁”向導。通常它有一個目錄常量前綴。
如果 UsePreviousAppDir 是 yes (默認值)並且安裝程式發現已經安裝了一個相同應用程式的早期版本,它將用先前選擇的目錄代替默認的目錄名稱。
示例︰
如果你使用︰
DefaultDirName={sd}\MYPROG
在 Setup 中,典型地應有如下顯示︰
C:\MYPROG
如果你使用︰
DefaultDirName={pf}\My Program
在 Setup 中,典型地應有如下顯示︰
C:\Program Files\My Program
[Setup]: Uninstallable
有效值︰ yes 或 no
默認值︰ yes
說明︰
它決定了 Inno Setup 的自動卸載程式是否被包含在安裝程式中。如果是 yes 將包含卸載程式,如果是 no 將不會包括可卸載支持,最終用戶只能用手工的方法刪除屬于你的應用程式的文件。
[Setup]: MinVersion
格式︰ a.bb,c.dd, 這裡的 a.bb 是表示 Windows 的版本,c.dd 是表示 Windows NT 的版本。
默認值︰ 4,4
說明︰
該關鍵字讓你指定營運你的軟體所需要的最低的 Windows 或 Windows NT 的版本,默認值是“4,4”,實際上它也可以被設置為“4,3.51”來支持 NT 3.51 . 要防止你的程式被營運在 Windows 或 Windows NT 上,指定“0”為其中之一的最低版本。版本創建編號(Build numbers)和(或)服務包級別(Service pack levels)可以被包括在版本號中。
如果用戶的系統不適合所要求的最低版本,安裝程式將給出一個錯誤消息然後退出。
[Setup]: OnlyBelowVersion
格式︰ a.bb,c.dd, 這裡的 a.bb 是表示 Windows 的版本,c.dd 是表示 Windows NT 的版本。
默認︰ 0,0
說明︰
該關鍵字讓你指定不能營運你的軟體的最低的 Windows 或 Windows NT 的版本(亦即高于此版本則無法營運)。指定 0 為其中之一的版本的意思是沒有版本上限。版本創建編號(Build numbers)和(或)服務包級別(service pack levels)可以被包括在版本號中。
該關鍵字實際上是和 MinVersion 恰好相反。
[Setup]: AdminPrivilegesRequired
有效值︰ yes 或 no
默認值︰ no
說明︰
如果設置為 yes, 而且用戶沒有管理員的權限,那么安裝程式在啟動的時候將給出一個錯誤消息(“安裝這個程式時你必須以管理員的身分登錄。”)。它只適用于 Windows NT/2000.
[Setup]: DisableAppendDir
有效值︰ yes 或 no
默認值︰ no
說明︰
當設置為 yes 時,安裝程式不會自動的添加上次組件的路徑從 DefaultDirName 到用戶在“選擇目錄”向導頁上雙擊鼠標選擇的目錄。此外,它設置目錄列表框的初始目錄為 DefaultDirName (如果該目錄存在)而不是上一級。
[Setup]: EnableDirDoesntExistWarning
有效值︰ yes 或 no
默認值︰ no
說明︰
當設置為 yes 時,如果用戶選擇的文件夾不存在安裝程式將顯示一個消息框。當這項為 yes 時通常你還應該設置 DirExistsWarning=no。
[Setup]: AlwaysCreateUninstallIcon
有效值︰ yes 或 no
默認值︰ no
說明︰
如果該項為 yes, 除了在控制面板的添加/刪除程式中添加一項之外安裝程式還將創建一個 “卸載 ...” 應用程式圖標。
在 NT 3.51 上安裝程式將會始終創建這個應用程式圖標不管該項的設置,因為它沒有包含“添加/刪除程式”的部件。
[Setup]: ExtraDiskSpaceRequired
默認值︰ 0
說明︰
正常情況下,磁片空間的需求是依照 [Files] 段中的所有文件的合計值計算出來並在向導中被顯示的。如果不管什麼原因你想要增加顯示的磁片空間,以位元組為單位設置 ExtraDiskSpaceRequired 的數值你想要合計該數字。 (1048576 位元組 = 1 兆位元組)
[Setup]: CompressLevel
有效值︰ 0 到 9
默認值︰ 7
說明︰
這是一個從 1 到 9 的數字,它指定了要給文件使用多大的壓縮率,0 表示不壓縮,9 表示最大限度的壓縮。數字越大處理的就越慢,使用高于默認值 7 的數字來壓縮並沒有多大的改善。
[Setup]: CreateAppDir
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果該值設置位 no, 將不會創建應用程式的目錄,也不會顯示“選擇目的文件夾”向導頁,並且 {app} 目錄常量會等效為 {win} 目錄常量。當 CreateAppDir 是 no 時如果卸載功能是允許的,卸載數據文件將會被創建于系統的 Windows 目錄。
[Setup]: CreateUninstallRegKey
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果該值設置為 no, 安裝程式將不會在控制面板的“添加/刪除程式”中創建一項。這個可以用于你的應用程式只是更新一個已經存在的應用程式而不想創建其它的項,但是請不要完全的禁止卸載功能(透過 Uninstallable=no)。
當這個關鍵字設置為 no 時,UpdateUninstallAppName 通常也設置為 no .
[Setup]: OverwriteUninstRegEntries
說明︰
1.3 版本以後已廢棄。該關鍵字已經不再被支持並且被忽略。在 Inno Setup 1.3.6 及以後的版本中,它的功能作為如果設置為 1 優先版本的 OverwriteUninstRegEntries 關鍵字(這是默認的設置)。
[Setup]: DirExistsWarning
有效值︰ auto, yes 或 no
默認值︰ auto
說明︰
當設置為 auto 時,即默認的設置,如果用戶在選擇目標文件夾向導頁中選擇了一個已經存在的文件夾,安裝程式將顯示“文件夾︰ … 已經存在,以願意將程式安裝到這個文件夾下面嗎?”的消息,除非有相同的應用程式的其它版本已經安裝並且也選擇了和上次安裝時相同的目錄(僅如果 UsePreviousAppDir 是 yes ,即默認設置)。
當設置為 yes 時,如果用戶選擇了已存在的目錄安裝程式將始終顯示“目錄已存在的消息”。
當設置為 no 時,安裝程式決不會顯示“目錄已存在的消息”。
[Setup]: DisableDirExistsWarning
有效值︰ yes 或 no
默認值︰ no
說明︰
到版本 1.3.6 時已經廢棄。使用 DirExistsWarning 代替。
編譯器仍然承認 DisableDirExistsWarning,但是如果 DisableDirExistsWarning=no 它將被轉換成 DirExistsWarning=auto, 而且 DisableDirExistsWarning=yes 被轉換成 DirExistsWarning=no. 如果同時指定了 DisableDirExistsWarning 和 DirExistsWarning 關鍵字,則優先處理 DirExistsWarning.
[Setup]: DisableDirPage
有效值︰ yes 或 no
默認值︰ no
說明︰
如果該項設置為 yes, 安裝程式將不會顯示“選擇目標文件夾”向導頁。在這種情況下,它將始終使用默認的目錄名。
[Setup]: DisableFinishedPage
有效值︰ yes 或 no
默認值︰ no
說明︰
如果該項設置為 yes, 安裝程式將不會顯示“安裝完成”向導頁,並且在一次安裝過程結束后會立即關閉安裝程式。如果在 [Run] 段裡面有一個要被執行的程式使用了 nowait 標記,並且你不希望在該程式被啟動之候安裝完成窗口還逗留在后台,此時該項是有用的。
注意安裝程式認為要重新啟動計算機,或如果指派了一個文件給 [Setup] 段的 InfoAfterFile 關鍵字,都將忽略 DisableFinishedPage 關鍵字。象這些情況,仍然會顯示“安裝完成”向導頁。
[Setup]: DisableProgramGroupPage
有效值︰ yes 或 no
默認值︰ no
說明︰
如果該項設置為 yes, 安裝程式將不會顯示“選擇程式組”向導頁。在這種情況下,它將使用由 [Setup] 段的 DefaultGroupName 關鍵字指定的組名,或者“(Default)”如果沒有指定組名的話。
[Setup]: AlwaysUsePersonalGroup
有效值︰ yes 或 no
默認值︰ no
說明︰
通常對于 Windows NT/2000, 如果用戶具有管理員權限,Inno Setup 的 {group} 常量被指向全部用戶(All Users)的開始菜單。如果該項被設置為 yes, 它將始終使用當前用戶的私人文檔(Profile)。
[Setup]: OutputBaseFilename
默認值︰ setup
說明︰
這個關鍵字允許你為輸出的安裝程式文件指定一個不同的名字,這樣一來你就不用在營運完安裝編譯器以後手工為它們改名。
注意︰如果 UseSetupLdr 被設置為 no, 輸出文件 SETUP.0 和 SETUP.MSG 的名字是不會被改變的,因為它們是強製編碼(hard-coded)的名字。
示例︰ OutputBaseFilename=MyProg100
[Setup]: UninstallFilesDir
默認值︰ {app}
說明︰
指定存放卸載程式文件“unins*.*”的目錄。
注意︰對于同一個應用程式的更新版本不應該將它賦一個不同的值,這樣一來安裝程式就不能在以前的版本中找到卸載記錄,因此就不能添加到該應用程式。
示例︰ UninstallFilesDir={app}\uninst
[Setup]: UninstallDisplayIcon
說明︰
讓你指定一個確定的圖標文件(可以是一個可執行文件或者一個 .ico 文件)來顯示在 Windows 2000 控制面板的“添加刪除程式”的卸載項當中,文件名通常以一個目錄常量開始。
如果指定的文件包含多個圖標,你可以加上“,n”后綴以指定一個圖標索引,這裡的 n 是以零為基數的索引數值。
如果沒有指定該關鍵字或者該關鍵字為空,Windows 將自己選擇一個圖標,當然這個可能是你不太喜歡的圖標。
示例︰
UninstallDisplayIcon={app}\MyProg.exe
UninstallDisplayIcon={app}\MyProg.exe,1
[Setup]: UninstallDisplayName
說明︰
讓你為控制面板的“添加/刪除程式”中的程式項指定一個製定的名字。如果未指定該關鍵字或該關鍵字為空,安裝程式將使用 [Setup] 段中的 AppVerName 關鍵字的名字(就像老版本的 Inno Setup 一樣)。
由於 Windows 9x 的控制面板的“添加/刪除程式”項的限制,UninstallDisplayName 不能超過 63 個字符。
示例︰
UninstallDisplayName=My Program
[Setup]: UninstallIconName
說明︰
你能夠使用該關鍵字給安裝程式創建的卸載圖標指定一個製定的名字(參見AlwaysCreateUninstallIcon)。如果該關鍵字為空或沒有指定,安裝程式將其命名為“卸載 App-Name”,這裡的“App-Name”是由 [Setup] 段的關鍵字 AppName 指定的。
注意︰ 記住 Windows 95/NT 4+ 的應用程式圖標是作為文件直接存儲的,這樣一來普通文件所不允許使用的字符都不能用來作為應用程式圖標的名稱。
示例︰ UninstallIconName=Uninstall My Program
[Setup]: UninstallLogMode
有效值︰ append, new 或 overwrite
默認值︰ append
說明︰
append, 默認設置,如果可能,通知安裝程式添加到一個已存在的卸載記錄。
new, 同 Inno Setup 1.3 版本以前的版本的行為是一致的,通知安裝程式始終創建一個新的卸載記錄。
overwrite 通知安裝程式要覆蓋相同的應用程式的任何已存在的卸載記錄而不是添加(這是不被推薦的)。相同的規則添加到已存在的記錄應用于覆蓋已存在的記錄。
示例︰ UninstallLogMode=append
[Setup]: UpdateUninstallAppName
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果為 yes, 當添加到一個已存在的卸載記錄時,安裝程式將以當前的安裝程式的 AppName 替換在卸載記錄中的 AppName. 卸載記錄中的 AppName 決定了卸載程式顯示的標題。如果你的安裝程式只是一個升級或附加到一個已存在的程式,並且你不想改變卸載程式的標題,那么你可以設置該值為 no.
[Setup]: DefaultGroupName
說明︰
該關鍵字的值是默認的“程式管理器/開始菜單”程式組的名稱,它被“選擇程式組”向導頁使用。如果該關鍵字為空或沒有指定的話,它將會使用“(默認)”作為其名稱。
注意︰ 記住 Windows 95/NT 4+ 的應用程式圖標是作為文件直接存儲的,這樣一來普通文件所不允許使用的字符都不能用來作為應用程式圖標的名稱。
示例︰ DefaultGroupName=My Program
[Setup]: DisableStartupPrompt
有效值︰ yes 或 no
默認值︰ no
說明︰
如果該值被設為 yes, 安裝程式將不會顯示“準備安裝…,你希望繼續嗎?”的提示。
如果 UseSetupLdr 被設置為 no 該值將不會產生作用。
[Setup]: DiskSpanning
有效值︰ yes 或 no
默認值︰ no
說明︰
決定編譯器是創建一個單獨的 SETUP.EXE, 還是把它分割成為幾個文件以適合于放到分開的軟磁片上。當這個關鍵字被設置為 yes, 磁片生成是允許的,將輸出文件 SETUP.EXE 和 SETUP.1 複製到第一個磁片上,SETUP.2 複製到第二個磁片上,等等。
[Setup]: DiskSize
默認值︰ 1457664 (一個 1.44MB 軟磁片的大小)
說明︰
指定了一個磁片的可用空間統計數值的位元組值。
如果 [Setup] 段的關鍵字 DiskSpanning 沒有允許磁片輸出則這個關鍵字就會被忽略。
[Setup]: DiskClusterSize
默認值︰ 512 (軟磁片的標準的簇的大小)
說明︰
它指定了磁片介質的簇的大小。安裝編譯器需要知道該值為了適當的填充每一個磁片的容量。
如果 [Setup] 段的關鍵字 DiskSpanning 沒有允許磁片輸出則這個關鍵字就會被忽略。
[Setup]: ReserveBytes
默認值︰ 0
說明︰
指定了應該在第一張磁片上保留的最小空閒位元組數,這樣可以用于將其它的不是安裝程式部分的文件複製到第一張磁片上,比如說一個自述文檔。
安裝編譯器將把這個數值取整為最接近的簇。
如果 [Setup] 段的關鍵字 DiskSpanning 沒有允許磁片輸出則這個關鍵字就會被忽略。
[Setup]: DontMergeDuplicateFiles
有效值︰ yes 或 no
默認值︰ no
說明︰
通常兩個具有相同的源文件的項將只會被存儲和壓縮一次。如果你的安裝程式中有一組相同的文件,在腳本中使他們只想相同的源文件,這樣你的安裝程式的能夠明顯縮小。如果由於某些原因你希望禁止這個功能,設置該關鍵字為 yes .
[Setup]: AllowNoIcons
有效值︰ yes 或 no
默認值︰ no
說明︰
這個用于決定安裝程式是否顯示一個“不創建任何圖標”的複選框,這樣使用戶能夠跳過創建程式圖標的過程。如果該項為 no 將不會顯示複選框,如果為 yes 則將被顯示。
如果安裝程式營運在 NT 3.51 上時選擇了“不創建任何圖標”的複選框,那么用戶能夠徹底卸載應用程式的辦法只有執行應用程式目錄下面的 unins???.exe 文件。因為這個原因,我們推薦你保留 AllowNoIcons 設置為 no.
[Setup]: AllowRootDirectory
有效值︰ yes 或 no
默認值︰ no
說明︰
當設置為 no 時,即默認的,用戶將不能被允許在“選擇目錄頁”向導中輸入一個根目錄(就像“C:\”)。
[Setup]: AlwaysRestart
有效值︰ yes 或 no
默認值︰ no
說明︰
當設置為 yes, 安裝程式始終會在一次成功的安裝過程結束后提示用戶重新啟動系統,而不管這是不是必須的(因為在 [Files] 段的一些項當中帶有 restartreplace 標記)。
[Setup]: MessagesFile
默認值︰ compiler:DEFAULT.ISL
說明︰
指定要讀取的默認訊息的文件的名稱。營運安裝編譯器時該文件必須位于你的安裝程式的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
當指定了多個文件時,它們時按照它們所排列的順序被讀取的,因而最後的消息文件中的消息就會覆蓋其先前的消息文件。
請參見 [Messages] 段幫助主題關於 .isl 文件格式的詳細資料。
示例︰ MessagesFile=compiler:czech.isl
MessagesFile=compiler:default.isl,compiler:mymessages.isl
[Setup]: LicenseFile
說明︰
指定一個可選的許可協議文件的名稱,為 .txt 或 .rtf (豐富文本)格式,它在用戶選擇程式的目標文件夾之前被顯示。營運安裝編譯器時該文件必須位于你的安裝程式的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
示例︰ LicenseFile=license.txt
[Setup]: InfoBeforeFile
說明︰
指定一個可選的自述文檔(Readme)的名稱,為 .txt 或 .rtf (豐富文本)格式,它在用戶選擇程式的目標文件夾之前被顯示。營運安裝編譯器時該文件必須位于你的安裝程式的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
示例︰ InfoBeforeFile=infobefore.txt
[Setup]: InfoAfterFile
說明︰
指定一個可選的自述文檔(Readme)的名稱,為 .txt 或 .rtf (豐富文本)格式,它會在安裝成功以後被顯示。營運安裝編譯器時該文件必須位于你的安裝程式的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以 “compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
這個不同于代有 isreadme 標記的文件項,它的文本是作為向導的一頁被顯示的,而后者顯示于一個單獨的記事本窗口。
示例︰ InfoAfterFile=infoafter.txt
[Setup]: ChangesAssociations
有效值︰ yes 或 no
默認值︰ no
說明︰
當設置為 yes 時,安裝程式會在其安裝過程結束時告訴資源管理器要刷新它的文件關聯訊息,並且卸載程式在其卸載過程結束時也會去這樣作。如果安裝程式營運在 Windows NT 3.51 上時這個關鍵字時不起作用的。
如果你的安裝程式創建了一個文件關聯但是沒有將 ChangesAssociations 設置為 yes, 該文件類型的正確的圖標很可能不會被顯示知道用戶註銷或者重新啟動計算機。
[Setup]: UsePreviousAppDir
有效值︰ yes 或 no
默認值︰ yes
說明︰
當該關鍵字被設置為 yes 時,即默認值,再安裝程式啟動時將會在註冊表中查找看是否有相同的應用程式已經被安裝,如果是這樣,它將使用先前的安裝程式的目錄作為默認的目錄提供給用戶的向導。
注意只有 Inno Setup 1.3.1 和其后續版本才會在註冊表中保存安裝的目錄,就是說安裝程式不會“看見”老版本的 Inno Setup 安裝的應用程式。
[Setup]: UsePreviousGroup
有效值︰ yes 或 no
默認值︰ yes
說明︰
當該關鍵字被設置為 yes 時,即默認值,再安裝程式啟動時將會在註冊表中查找看是否有相同的應用程式已經被安裝,如果是這樣,它將使用先前的安裝程式的開始菜單組作為默認的開始菜單組提供給用戶的向導。
注意只有 Inno Setup 1.3.1 和其后續版本才會在註冊表中保存安裝的目錄,就是說安裝程式不會“看見”老版本的 Inno Setup 安裝的應用程式。
[Setup]: Password
說明︰
指定一個密碼,在安裝過程開始時提示用戶輸入。
如果使用了一個密碼,重要的是要緊記並沒有加密技術被使用,並且 Inno Setup 的源代碼是完全開放的,對于一個個別的富有經驗的人來說從安裝程式中移去密碼的保護不是十分困難的。使用密碼僅僅起到一個阻止那些沒有得到授權的人使用你的安裝程式。
[Setup]: WizardImageFile
默認值︰ compiler:WIZIMAGE.BMP
說明︰
指定要在安裝程式向導左側顯示的位圖文件的名稱。營運安裝編譯器時該文件必須位于你的安裝程式的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
當前還不支持 256 色位圖,因為尚未使用調色板句柄。位圖的最大尺寸是 117x231 象素。
示例︰ WizardImageFile=myimage.bmp
[Setup]: WindowShowCaption
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果設置為 no, 安裝程式將會是真正的“全螢幕” 它沒有標題欄和邊框,並且會位于任務欄的前面。
[Setup]: WindowStartMaximized
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果設置為 no, 安裝程式啟動時不會初始為最大化,這樣會導致藏起任務欄。
[Setup]: WindowResizable
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果設置為 no, 在安裝程式背景窗口不是最大化狀態時用戶將不能調整其大小。
[Setup]: WindowVisible
有效值︰ yes 或 no
默認值︰ yes
說明︰
如果設置為 no, 安裝程式背景窗口將是不可見的 只有向導和安裝過程窗口。
[Setup]: WizardImageBackColor
有效值︰ 一個值形如 $bbggrr, 這裡的 rr, gg 和 bb 指定了兩位的亮度值(以十六進製表示)分別為紅色,綠色和藍色。或者也可以是下列預定義的顏色名稱之一︰clBlack(黑色),clMaroon(暗紅),clGreen(綠色),clOlive(橄欖綠),clNavy(深藍),clPurple(紫色),clTeal(深青),clGray(灰色),clSilver(淺灰),clRed(紅色),clLime(淺綠),clYellow(黃色),clBlue(藍色),clFuchsia(紫紅),clAqua(青綠),clWhite(白色)。
默認值︰ clTeal
說明︰
該關鍵字指定了用于填充向導位圖(由 WizardImageFile 指定)周遭的未使用區域的背景顏色。
[Setup]: SourceDir
說明︰
給腳本指定一個新的源目錄sourcedirectorynotes。
示例︰ SourceDir=c:\files
[Setup]: OutputDir
說明︰
給腳本指定一個新的輸出目錄,這是安裝編譯器放置輸出的 SETUP.* 文件的地方。默認情況下它在含有腳本文件的目錄下創建一個“OUTPUT”子目錄。
示例︰ OutputDir=c:\output
其它
關於 Program Files 目錄的說明
Program Files 目錄歷來就只被 Windows 95/NT 4+ 支持。在 NT 3.51 上一個“類比的” Program Files 目錄被創建于系統驅動器目錄下硬代碼名稱“\Program Files”。
源目錄
默認情況下,如果沒有包含全程路徑名,安裝編譯器期望在與腳本文件相同的目錄中找到在腳本中 [Files] 段引用的 Source 參數的文件和 [Setup] 段引用的文件。要指定一個不同的源目錄,在腳本的 [Setup] 段中創建一個 SourceDir 關鍵字。
使用版本創建編號和(或)服務包級別
在 MinVersion 和 OnlyBelowVersion 中的版本號能夠包含版本創建編號(Build numbers)和(或)服務包級別(service pack levels) 例如︰5.0.2195, 5.0sp1, 5.0.2195sp1。如果一個版本創建編號沒有被指定或者為零,安裝程式將不會檢查版本創建編號。如果一個服務包級別沒有被指定或者為零,安裝程式會將其解釋為“沒有服務包”。注意安裝程式只能在 NT 4.0 及其后續版本中檢查服務包級別,所以指定“3.51sp5”去檢查NT 3.51 SP5 將不會工作。
關於"yes" 和 "no" 的說明
為了保持和舊版本 Inno Setup 的兼容性,1 和 0 可以分別的代替 yes 和 no 使用。
另外,它也允許 true 和 false 代替 yes 和 no 使用。
相同的應用程式
“相同的應用程式” 涉及到兩個分開的安裝程式共享一個相同的 AppId 設置 (或者如果 AppId 沒有設置,那么有相同的 AppName 設置).
添加到已存在的卸載記錄
當一個新版本的應用程式被安裝並覆蓋一個已存在的版本時,並不創建一個新的卸載記錄文件(unins???.dat),安裝程式會在默認的情況下尋找並添加到一個已存在的屬于相同的應用程式並在相同的目錄中的卸載記錄文件中,這樣,當應用程式被卸載時,所有的不同的安裝程式所做的改變將會被撤銷(開始于最近的安裝程式)。
卸載程式將會使用最近的應用程式的安裝程式的消息(messages)。然而,有一個例外︰如果一個安裝程式被一個舊版本的 Inno Setup 所創建,它包含一個比用戶系統中的已存在的版本還要舊的卸載程式,兩個卸載程式的消息都不會被替換,儘管在這種情況下卸載記錄仍然會被添加,因為它的文件格式是向后兼容的。
卸載程式顯示的應用程式的名稱將會與最近安裝程式中 [Setup] 段的關鍵字 AppName 的值相同,除非 UpdateUninstallAppName 被設置為 no.
卸載記錄添加功能是不熟悉的 Inno Setup 1.3。如果你希望禁止它,設置 [Setup] 段的關鍵字 UninstallLogMode.
注意︰安裝程式只能添加到被 Inno Setup 1.3.1 (及其后續版本)的安裝程式創建的卸載記錄文件中。
2008年9月2日 星期二
取得系統語言
GetSystemDefaultLangID()
GetUserDefaultLangID()
Identifier Language
0x0000 Language Neutral
0x0400 Process Default Language
0x0401 Arabic (Saudi Arabia)
0x0801 Arabic (Iraq)
0x0c01 Arabic (Egypt)
0x1001 Arabic (Libya)
0x1401 Arabic (Algeria)
0x1801 Arabic (Morocco)
0x1c01 Arabic (Tunisia)
0x2001 Arabic (Oman)
0x2401 Arabic (Yemen)
0x2801 Arabic (Syria)
0x2c01 Arabic (Jordan)
0x3001 Arabic (Lebanon)
0x3401 Arabic (Kuwait)
0x3801 Arabic (U.A.E.)
0x3c01 Arabic (Bahrain)
0x4001 Arabic (Qatar)
0x0402 Bulgarian
0x0403 Catalan
0x0404 Chinese (Taiwan Region)
0x0804 Chinese (PRC)
0x0c04 Chinese (Hong Kong SAR, PRC)
0x1004 Chinese (Singapore)
0x0405 Czech
0x0406 Danish
0x0407 German (Standard)
0x0807 German (Swiss)
0x0c07 German (Austrian)
0x1007 German (Luxembourg)
0x1407 German (Liechtenstein)
0x0408 Greek
0x0409 English (United States)
0x0809 English (United Kingdom)
0x0c09 English (Australian)
0x1009 English (Canadian)
0x1409 English (New Zealand)
0x1809 English (Ireland)
0x1c09 English (South Africa)
0x2009 English (Jamaica)
0x2409 English (Caribbean)
0x2809 English (Belize)
0x2c09 English (Trinidad)
0x040a Spanish (Traditional Sort)
0x080a Spanish (Mexican)
0x0c0a Spanish (Modern Sort)
0x100a Spanish (Guatemala)
0x140a Spanish (Costa Rica)
0x180a Spanish (Panama)
0x1c0a Spanish (Dominican Republic)
0x200a Spanish (Venezuela)
0x240a Spanish (Colombia)
0x280a Spanish (Peru)
0x2c0a Spanish (Argentina)
0x300a Spanish (Ecuador)
0x340a Spanish (Chile)
0x380a Spanish (Uruguay)
0x3c0a Spanish (Paraguay)
0x400a Spanish (Bolivia)
0x440a Spanish (El Salvador)
0x480a Spanish (Honduras)
0x4c0a Spanish (Nicaragua)
0x500a Spanish (Puerto Rico)
0x040b Finnish
0x040c French (Standard)
0x080c French (Belgian)
0x0c0c French (Canadian)
0x100c French (Swiss)
0x140c French (Luxembourg)
0x040d Hebrew
0x040e Hungarian
0x040f Icelandic
0x0410 Italian (Standard)
0x0810 Italian (Swiss)
0x0411 Japanese
0x0412 Korean
0x0812 Korean (Johab)
0x0413 Dutch (Standard)
0x0813 Dutch (Belgian)
0x0414 Norwegian (Bokmal)
0x0814 Norwegian (Nynorsk)
0x0415 Polish
0x0416 Portuguese (Brazilian)
0x0816 Portuguese (Standard)
0x0418 Romanian
0x0419 Russian
0x041a Croatian
0x081a Serbian (Latin)
0x0c1a Serbian (Cyrillic)
0x041b Slovak
0x041c Albanian
0x041d Swedish
0x081d Swedish (Finland)
0x041e Thai
0x041f Turkish
0x0421 Indonesian
0x0422 Ukrainian
0x0423 Belarusian
0x0424 Slovenian
0x0425 Estonian
0x0426 Latvian
0x0427 Lithuanian
0x0429 Farsi
0x042a Vietnamese
0x042d Basque
0x0436 Afrikaans
0x0438 Faeroese
GetUserDefaultLangID()
Identifier Language
0x0000 Language Neutral
0x0400 Process Default Language
0x0401 Arabic (Saudi Arabia)
0x0801 Arabic (Iraq)
0x0c01 Arabic (Egypt)
0x1001 Arabic (Libya)
0x1401 Arabic (Algeria)
0x1801 Arabic (Morocco)
0x1c01 Arabic (Tunisia)
0x2001 Arabic (Oman)
0x2401 Arabic (Yemen)
0x2801 Arabic (Syria)
0x2c01 Arabic (Jordan)
0x3001 Arabic (Lebanon)
0x3401 Arabic (Kuwait)
0x3801 Arabic (U.A.E.)
0x3c01 Arabic (Bahrain)
0x4001 Arabic (Qatar)
0x0402 Bulgarian
0x0403 Catalan
0x0404 Chinese (Taiwan Region)
0x0804 Chinese (PRC)
0x0c04 Chinese (Hong Kong SAR, PRC)
0x1004 Chinese (Singapore)
0x0405 Czech
0x0406 Danish
0x0407 German (Standard)
0x0807 German (Swiss)
0x0c07 German (Austrian)
0x1007 German (Luxembourg)
0x1407 German (Liechtenstein)
0x0408 Greek
0x0409 English (United States)
0x0809 English (United Kingdom)
0x0c09 English (Australian)
0x1009 English (Canadian)
0x1409 English (New Zealand)
0x1809 English (Ireland)
0x1c09 English (South Africa)
0x2009 English (Jamaica)
0x2409 English (Caribbean)
0x2809 English (Belize)
0x2c09 English (Trinidad)
0x040a Spanish (Traditional Sort)
0x080a Spanish (Mexican)
0x0c0a Spanish (Modern Sort)
0x100a Spanish (Guatemala)
0x140a Spanish (Costa Rica)
0x180a Spanish (Panama)
0x1c0a Spanish (Dominican Republic)
0x200a Spanish (Venezuela)
0x240a Spanish (Colombia)
0x280a Spanish (Peru)
0x2c0a Spanish (Argentina)
0x300a Spanish (Ecuador)
0x340a Spanish (Chile)
0x380a Spanish (Uruguay)
0x3c0a Spanish (Paraguay)
0x400a Spanish (Bolivia)
0x440a Spanish (El Salvador)
0x480a Spanish (Honduras)
0x4c0a Spanish (Nicaragua)
0x500a Spanish (Puerto Rico)
0x040b Finnish
0x040c French (Standard)
0x080c French (Belgian)
0x0c0c French (Canadian)
0x100c French (Swiss)
0x140c French (Luxembourg)
0x040d Hebrew
0x040e Hungarian
0x040f Icelandic
0x0410 Italian (Standard)
0x0810 Italian (Swiss)
0x0411 Japanese
0x0412 Korean
0x0812 Korean (Johab)
0x0413 Dutch (Standard)
0x0813 Dutch (Belgian)
0x0414 Norwegian (Bokmal)
0x0814 Norwegian (Nynorsk)
0x0415 Polish
0x0416 Portuguese (Brazilian)
0x0816 Portuguese (Standard)
0x0418 Romanian
0x0419 Russian
0x041a Croatian
0x081a Serbian (Latin)
0x0c1a Serbian (Cyrillic)
0x041b Slovak
0x041c Albanian
0x041d Swedish
0x081d Swedish (Finland)
0x041e Thai
0x041f Turkish
0x0421 Indonesian
0x0422 Ukrainian
0x0423 Belarusian
0x0424 Slovenian
0x0425 Estonian
0x0426 Latvian
0x0427 Lithuanian
0x0429 Farsi
0x042a Vietnamese
0x042d Basque
0x0436 Afrikaans
0x0438 Faeroese
2008年8月25日 星期一
Trouble shooting 20080826
Q:
LoadLibrary在某些系統下可以正確載入DLL, 某些系統下會載入失敗, GetLastError回傳值為14001
A:
http://forums.msdn.microsoft.com/en-US/vcgeneral/thread/56e4d218-f0e7-4a7e-b440-f01106e6cdd6/
http://msdn.microsoft.com/en-us/library/abx4dbyh(VS.80).aspx
LoadLibrary在某些系統下可以正確載入DLL, 某些系統下會載入失敗, GetLastError回傳值為14001
A:
http://forums.msdn.microsoft.com/en-US/vcgeneral/thread/56e4d218-f0e7-4a7e-b440-f01106e6cdd6/
http://msdn.microsoft.com/en-us/library/abx4dbyh(VS.80).aspx
2008年8月19日 星期二
GetLastError
〖0〗-操作成功完成。
〖1〗-功能错误。
〖2〗-系统找不到指定的文件。
〖3〗-系统找不到指定的路径。
〖4〗-系统无法打开文件。
〖5〗-拒绝访问。
〖6〗-句柄无效。
〖7〗-存储控制块被损坏。
〖8〗-存储空间不足,无法处理此命令。
〖9〗-存储控制块地址无效。
〖10〗-环境错误。
〖11〗-试图加载格式错误的程序。
〖12〗-访问码无效。
〖13〗-数据无效。
〖14〗-存储器不足,无法完成此操作。
〖15〗-系统找不到指定的驱动器。
〖16〗-无法删除目录。
〖17〗-系统无法将文件移到不同的驱动器。
〖18〗-没有更多文件。
〖19〗-介质受写入保护。
〖20〗-系统找不到指定的设备。
〖21〗-设备未就绪。
〖22〗-设备不识别此命令。
〖23〗-数据错误 (循环冗余检查)。
〖24〗-程序发出命令,但命令长度不正确。
〖25〗-驱动器无法找出磁盘上特定区域或磁道的位置。
〖26〗-无法访问指定的磁盘或软盘。
〖27〗-驱动器找不到请求的扇区。
〖28〗-打印机缺纸。
〖29〗-系统无法写入指定的设备。
〖30〗-系统无法从指定的设备上读取。
〖31〗-连到系统上的设备没有发挥作用。
〖32〗-进程无法访问文件,因为另一个程序正在使用此文件。
〖33〗-进程无法访问文件,因为另一个程序已锁定文件的一部分。
〖36〗-用来共享的打开文件过多。
〖38〗-到达文件结尾。
〖39〗-磁盘已满。
〖50〗-不支持网络请求。
〖51〗-远程计算机不可用 。
〖52〗-在网络上已有重复的名称。
〖53〗-找不到网络路径。
〖54〗-网络忙。
〖55〗-指定的网络资源或设备不再可用。
〖56〗-已到达网络 BIOS 命令限制。
〖57〗-网络适配器硬件出错。
〖58〗-指定的服务器无法运行请求的操作。
〖59〗-发生意外的网络错误。
〖60〗-远程适配器不兼容。
〖61〗-打印机队列已满。
〖62〗-无法在服务器上获得用于保存待打印文件的空间。
〖63〗-删除等候打印的文件。
〖64〗-指定的网络名不再可用。
〖65〗-拒绝网络访问。
〖66〗-网络资源类型错误。
〖67〗-找不到网络名。
〖68〗-超过本地计算机网卡的名称限制。
〖69〗-超出网络 BIOS 会话限制。
〖70〗-远程服务器已暂停,或正在启动过程中。
〖71〗-当前已无法再同此远程计算机连接,因为已达到计算机的连接数目极限。
〖72〗-已暂停指定的打印机或磁盘设备。
〖80〗-文件存在。
〖82〗-无法创建目录或文件。
〖83〗-INT 24 失败。
〖84〗-无法取得处理此请求的存储空间。
〖85〗-本地设备名已在使用中。
〖86〗-指定的网络密码错误。
〖87〗-参数错误。
〖88〗-网络上发生写入错误。
〖89〗-系统无法在此时启动另一个进程。
〖100〗-无法创建另一个系统信号灯。
〖101〗-另一个进程拥有独占的信号灯。
〖102〗-已设置信号灯且无法关闭。
〖103〗-无法再设置信号灯。
〖104〗-无法在中断时请求独占的信号灯。
〖105〗-此信号灯的前一个所有权已结束。
〖107〗-程序停止,因为替代的软盘未插入。
〖108〗-磁盘在使用中,或被另一个进程锁定。
〖109〗-管道已结束。
〖110〗-系统无法打开指定的设备或文件。
〖111〗-文件名太长。
〖112〗-磁盘空间不足。
〖113〗-无法再获得内部文件的标识。
〖114〗-目标内部文件的标识不正确。
〖117〗-应用程序制作的 IOCTL 调用错误。
〖118〗-验证写入的切换参数值错误。
〖119〗-系统不支持请求的命令。
〖120〗-此功能只被此系统支持。
〖121〗-信号灯超时时间已到。
〖122〗-传递到系统调用的数据区太小。
〖123〗-文件名、目录名或卷标语法不正确。
〖124〗-系统调用级别错误。
〖125〗-磁盘没有卷标。
〖126〗-找不到指定的模块。
〖127〗-找不到指定的程序。
〖128〗-没有等候的子进程。
〖130〗-试图使用操作(而非原始磁盘 I/O)的已打开磁盘分区的文件句柄。
〖131〗-试图移动文件指针到文件开头之前。
〖132〗-无法在指定的设备或文件上设置文件指针。
〖133〗-包含先前加入驱动器的驱动器无法使用 JOIN 或 SUBST 命令。
〖134〗-试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令。
〖135〗-试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令。
〖136〗-系统试图解除未合并驱动器的 JOIN。
〖137〗-系统试图解除未替代驱动器的 SUBST。
〖138〗-系统试图将驱动器合并到合并驱动器上的目录。
〖139〗-系统试图将驱动器替代为替代驱动器上的目录。
〖140〗-系统试图将驱动器合并到替代驱动器上的目录。
〖141〗-系统试图替代驱动器为合并驱动器上的目录。
〖142〗-系统无法在此时运行 JOIN 或 SUBST。
〖143〗-系统无法将驱动器合并到或替代为相同驱动器上的目录。
〖144〗-目录并非根目录下的子目录。
〖145〗-目录非空。
〖146〗-指定的路径已在替代中使用。
〖147〗-资源不足,无法处理此命令。
〖148〗-指定的路径无法在此时使用。
〖149〗-企图将驱动器合并或替代为驱动器上目录是上一个替代的目标的驱动器。
〖150〗-系统跟踪信息未在 CONFIG.SYS 文件中指定,或不允许跟踪。
〖151〗-为 DosMuxSemWait 指定的信号灯事件个数错误。
〖152〗-DosMuxSemWait 不可运行。已设置过多的信号灯。
〖153〗-DosMuxSemWait 清单错误。
〖154〗-输入的卷标超过目标文件系统的长度限制
〖155〗-无法创建另一个线程。
〖156〗-接收进程已拒绝此信号。
〖157〗-段已被放弃且无法锁定。
〖158〗-段已解除锁定。
〖159〗-线程标识的地址错误。
〖160〗-传递到 DosExecPgm 的参数字符串错误。
〖161〗-指定的路径无效。
〖162〗-信号已暂停。
〖164〗-无法在系统中创建更多的线程。
〖167〗-无法锁定文件区域。
〖170〗-请求的资源在使用中。
〖173〗-对于提供取消区域进行锁定的请求不明显。
〖174〗-文件系统不支持锁定类型的最小单元更改。
〖180〗-系统检测出错误的段号。
〖183〗-当文件已存在时,无法创建该文件。
〖186〗-传递的标志错误。
〖187〗-找不到指定的系统信号灯名称。
〖196〗-操作系统无法运行此应用程序。
〖197〗-操作系统当前的配置不能运行此应用程序。
〖199〗-操作系统无法运行此应用程序。
〖200〗-代码段不可大于或等于 64K。
〖203〗-操作系统找不到已输入的环境选项。
〖205〗-命令子树中的进程没有信号处理程序。
〖206〗-文件名或扩展名太长。
〖207〗-第 2 环堆栈已被占用。
〖208〗-没有正确输入文件名通配符 * 或 ?,或指定过多的文件名通配符。
〖209〗-正在发送的信号错误。
〖210〗-无法设置信号处理程序。
〖212〗-段已锁定且无法重新分配。
〖214〗-连到该程序或动态链接模块的动态链接模块太多。
〖215〗-无法嵌套调用 LoadModule。
〖230〗-管道状态无效。
〖231〗-所有的管道实例都在使用中。
〖232〗-管道正在关闭中。
〖233〗-管道的另一端上无任何进程。
〖234〗-更多数据可用。
〖240〗-取消会话。
〖254〗-指定的扩展属性名无效。
〖255〗-扩展属性不一致。
〖258〗-等待的操作过时。
〖259〗-没有可用的数据了。
〖266〗-无法使用复制功能。
〖267〗-目录名无效。
〖275〗-扩展属性在缓冲区中不适用。
〖276〗-装在文件系统上的扩展属性文件已损坏。
〖277〗-扩展属性表格文件已满。
〖278〗-指定的扩展属性句柄无效。
〖282〗-装入的文件系统不支持扩展属性。
〖288〗-企图释放并非呼叫方所拥有的多用户终端运行程序。
〖298〗-发向信号灯的请求过多。
〖299〗-仅完成部分的 ReadProcessMemoty 或 WriteProcessMemory 请求。
〖300〗-操作锁定请求被拒绝。
〖301〗-系统接收了一个无效的操作锁定确认。
〖487〗-试图访问无效的地址。
〖534〗-算术结果超过 32 位。
〖535〗-管道的另一端有一进程。
〖536〗-等候打开管道另一端的进程。
〖994〗-拒绝访问扩展属性。
〖995〗-由于线程退出或应用程序请求,已放弃 I/O 操作。
〖996〗-重叠 I/O 事件不在信号状态中。
〖997〗-重叠 I/O 操作在进行中。
〖998〗-内存分配访问无效。
〖999〗-错误运行页内操作。
〖1001〗-递归太深;栈溢出。
〖1002〗-窗口无法在已发送的消息上操作。
〖1003〗-无法完成此功能。
〖1004〗-无效标志。
〖1005〗-此卷不包含可识别的文件系统。请确定所有请求的文件系统驱动程序已加载,且此卷未损坏。
〖1006〗-文件所在的卷已被外部改变,因此打开的文件不再有效。
〖1007〗-无法在全屏幕模式下运行请求的操作。
〖1008〗-试图引用不存在的令牌。
〖1009〗-配置注册表数据库损坏。
〖1010〗-配置注册表项无效。
〖1011〗-无法打开配置注册表项。
〖1012〗-无法读取配置注册表项。
〖1013〗-无法写入配置注册表项。
〖1014〗-注册表数据库中的某一文件必须使用记录或替代复制来恢复。恢复成功完成。
〖1015〗-注册表损坏。包含注册表数据的某一文件结构损坏,或系统的文件内存映像损坏,或因为替代副本、日志缺少或损坏而无法恢复文件。
〖1016〗-由注册表启动的 I/O 操作恢复失败。注册表无法读入、写出或清除任意一个包含注册表系统映像的文件。
〖1017〗-系统试图加载或还原文件到注册表,但指定的文件并非注册表文件格式。
〖1018〗-试图在标记为删除的注册表项上运行不合法的操作。
〖1019〗-系统无法配置注册表日志中所请求的空间。
〖1020〗-无法在已有子项或值的注册表项中创建符号链接。
〖1021〗-无法在易变父项下创建稳定子项。
〖1022〗-通知更改请求正在完成中,且信息并未返回到呼叫方的缓冲区中。当前呼叫方必须枚举文件来查找更改。
〖1051〗-已发送停止控制到服务,该服务被其它正在运行的服务所依赖。
〖1052〗-请求的控件对此服务无效
〖1053〗-服务并未及时响应启动或控制请求。
〖1054〗-无法创建此服务的线程。
〖1055〗-锁定服务数据库。
〖1056〗-服务的实例已在运行中。
〖1057〗-帐户名无效或不存在,或者密码对于指定的帐户名无效。
〖1058〗-无法启动服务,原因可能是它被禁用或与它相关联的设备没有启动。
〖1059〗-指定了循环服务依存。
〖1060〗-指定的服务并未以已安装的服务存在。
〖1061〗-服务无法在此时接受控制信息。
〖1062〗-服务未启动。
〖1063〗-服务进程无法连接到服务控制器上。
〖1064〗-当处理控制请求时,在服务中发生异常。
〖1065〗-指定的数据库不存在。
〖1066〗-服务已返回特定的服务错误码。
〖1067〗-进程意外终止。
〖1068〗-依存服务或组无法启动。
〖1069〗-由于登录失败而无法启动服务。
〖1070〗-启动后,服务停留在启动暂停状态。
〖1071〗-指定的服务数据库锁定无效。
〖1072〗-指定的服务已标记为删除。
〖1073〗-指定的服务已存在。
〖1074〗-系统当前以最新的有效配置运行。
〖1075〗-依存服务不存在,或已被标记为删除。
〖1076〗-已接受使用当前引导作为最后的有效控制设置。
〖1077〗-上次启动之后,仍未尝试引导服务。
〖1078〗-名称已用作服务名或服务显示名。
〖1079〗-此服务的帐户不同于运行于同一进程上的其它服务的帐户。
〖1080〗-只能为 Win32 服务设置失败操作,不能为驱动程序设置。
〖1081〗-这个服务所运行的处理和服务控制管理器相同。所以,如果服务处理程序意外中止的话,服务控制管理器无法进行任何操作。
〖1082〗-这个服务尚未设置恢复程序。
〖1083〗-配置成在该可执行程序中运行的这个服务不能执行该服务。
〖1100〗-已达磁带的实际结尾。
〖1101〗-磁带访问已达文件标记。
〖1102〗-已达磁带或磁盘分区的开头。
〖1103〗-磁带访问已达一组文件的结尾。
〖1104〗-磁带上不再有任何数据。
〖1105〗-磁带无法分区。
〖1106〗-在访问多卷分区的新磁带时,当前的块大小不正确。
〖1107〗-当加载磁带时,找不到分区信息。
〖1108〗-无法锁定媒体弹出功能。
〖1109〗-无法卸载介质。
〖1110〗-驱动器中的介质可能已更改。
〖1111〗-复位 I/O 总线。
〖1112〗-驱动器中没有媒体。
〖1113〗-在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符。
〖1114〗-动态链接库 (DLL) 初始化例程失败。
〖1115〗-系统关机正在进行。
〖1116〗-因为没有任何进行中的关机过程,所以无法中断系统关机。
〖1117〗-因为 I/O 设备错误,所以无法运行此项请求。
〖1118〗-没有串行设备被初始化成功。串行驱动程序将卸载。
〖1119〗-无法打开正在与其他设备共享中断请求(IRQ)的设备。至少有一个使用该 IRQ 的其他设备已打开。
〖1120〗-序列 I/O 操作已由另一个串行口的写入完成。(IOCTL_SERIAL_XOFF_COUNTER 已达零。)
〖1121〗-因为已过超时时间,所以串行 I/O 操作完成。(IOCTL_SERIAL_XOFF_COUNTER 未达零。)
〖1122〗-在软盘上找不到 ID 地址标记。
〖1123〗-软盘扇区 ID 字符域与软盘控制器磁道地址不相符。
〖1124〗-软盘控制器报告软盘驱动程序不能识别的错误。
〖1125〗-软盘控制器返回与其寄存器中不一致的结果。
〖1126〗-当访问硬盘时,重新校准操作失败,重试仍然失败。
〖1127〗-当访问硬盘时,磁盘操作失败,重试仍然失败。
〖1128〗-当访问硬盘时,即使失败,仍须复位磁盘控制器。
〖1129〗-已达磁带结尾。
〖1130〗-服务器存储空间不足,无法处理此命令。
〖1131〗-检测出潜在的死锁状态。
〖1132〗-指定的基址或文件偏移量没有适当对齐。
〖1140〗-改变系统供电状态的尝试被另一应用程序或驱动程序否决。
〖1141〗-系统 BIOS 改变系统供电状态的尝试失败。
〖1142〗-试图在一文件上创建超过系统允许数额的链接。
〖1150〗-指定程序要求更新的 Windows 版本。
〖1151〗-指定程序不是 Windows 或 MS-DOS 程序。
〖1152〗-只能启动该指定程序的一个实例。
〖1153〗-该指定程序适用于旧的 Windows 版本。
〖1154〗-执行该应用程序所需的库文件之一被损坏。
〖1155〗-没有应用程序与此操作的指定文件有关联。
〖1156〗-在输送指令到应用程序的过程中出现错误。
〖1157〗-执行该应用程序所需的库文件之一无法找到。
〖1158〗-当前程序已使用了 Window 管理器对象的系统允许的所有句柄。
〖1159〗-消息只能与同步操作一起使用。
〖1160〗-指出的源元素没有媒体。
〖1161〗-指出的目标元素已包含媒体。
〖1162〗-指出的元素不存在。
〖1163〗-指出的元素是未显示的存储资源的一部分。
〖1164〗-显示设备需要重新初始化,因为硬件有错误。
〖1165〗-设备显示在尝试进一步操作之前需要清除。
〖1166〗-设备显示它的门仍是打开状态。
〖1167〗-设备没有连接。
〖1168〗-找不到元素。
〖1169〗-索引中没有同指定项相匹配的项。
〖1170〗-在对象上不存在指定的属性集。
〖1171〗-传递到 GetMouseMovePoints 的点不在缓冲区中。
〖1172〗-跟踪(工作站)服务没运行。
〖1173〗-找不到卷 ID。
〖1175〗-无法删除要被替换的文件。
〖1176〗-无法将替换文件移到要被替换的文件。要被替换的文件保持原来的名称。
〖1177〗-无法将替换文件移到要被替换的文件。要被替换的文件已被重新命名为备份名称。
〖1178〗-卷更改记录被删除。
〖1179〗-卷更改记录服务不处于活动中。
〖1180〗-找到一份文件,但是可能不是正确的文件。
〖1181〗-日志项从日志中被删除。
〖1200〗-指定的设备名无效。
〖1201〗-设备当前未连接上,但其为一个记录连接。
〖1202〗-企图记录先前已被记录的设备。
〖1203〗-无任何网络提供程序接受指定的网络路径。
〖1204〗-指定的网络提供程序名称无效。
〖1205〗-无法打开网络连接配置文件。
〖1206〗-网络连接配置文件损坏。
〖1207〗-无法枚举空载体。
〖1208〗-发生扩展错误。
〖1209〗-指定的组名格式无效。
〖1210〗-指定的计算机名格式无效。
〖1211〗-指定的事件名格式无效。
〖1212〗-指定的域名格式无效。
〖1213〗-指定的服务名格式无效。
〖1214〗-指定的网络名格式无效。
〖1215〗-指定的共享名格式无效。
〖1216〗-指定的密码格式无效。
〖1217〗-指定的消息名格式无效。
〖1218〗-指定的消息目标格式无效。
〖1219〗-提供的凭据与已存在的凭据集冲突。
〖1220〗-企图创建网络服务器的会话,但已对该服务器创建过多的会话。
〖1221〗-工作组或域名已由网络上的另一部计算机使用。
〖1222〗-网络未连接或启动。
〖1223〗-操作已被用户取消。
〖1224〗-请求的操作无法在使用用户映射区域打开的文件上执行。
〖1225〗-远程系统拒绝网络连接。
〖1226〗-网络连接已被适当地关闭了。
〖1227〗-网络传输终结点已有与其关联的地址。
〖1228〗-地址仍未与网络终结点关联。
〖1229〗-企图在不存在的网络连接上进行操作。
〖1230〗-企图在使用中的网络连接上进行无效的操作。
〖1231〗-不能访问网络位置。有关网络排除故障的信息,请参阅 Windows 帮助。
〖1232〗-不能访问网络位置。有关网络排除故障的信息,请参阅 Windows 帮助。
〖1233〗-不能访问网络位置。有关网络排除故障的信息,请参阅 Windows 帮助。
〖1234〗-没有任何服务正在远程系统上的目标网络终结点上操作。
〖1235〗-请求被终止。
〖1236〗-由本地系统终止网络连接。
〖1237〗-操作无法完成。应该重试。
〖1238〗-因为已达到此帐户的最大同时连接数限制,所以无法连接服务器。
〖1239〗-试图在这个帐户未被授权的时间内登录。
〖1240〗-此帐户并未得到从这个工作站登录的授权。
〖1241〗-请求的操作不能使用这个网络地址。
〖1242〗-服务器已经注册。
〖1243〗-指定的服务不存在。
〖1244〗-因为用户还未被验证,不能执行所要求的操作。
〖1245〗-因为用户还未登录网络,不能执行所要求的操作。指定的服务不存在。
〖1246〗-正在继续工作。
〖1247〗-试图进行初始操作,但是初始化已完成。
〖1248〗-没有更多的本地设备。
〖1249〗-指定的站点不存在。
〖1250〗-具有指定名称的域控制器已经存在。
〖1251〗-只有连接到服务器上时,该操作才受支持。
〖1252〗-即使没有改动,组策略框架也应该调用扩展。
〖1253〗-指定的用户没有一个有效的配置文件。
〖1254〗-Microsoft Small Business Server 不支持此操作。
〖1300〗-并非所有被引用的特权都指派给呼叫方。
〖1301〗-帐户名和安全标识间的某些映射未完成。
〖1302〗-没有为该帐户特别设置系统配额限制。
〖1303〗-没有可用的加密密钥。返回了一个已知加密密钥。
〖1304〗-密码太复杂,无法转换成 LAN Manager 密码。返回的 LAN Manager 密码为空字符串。
〖1305〗-修订级别未知。
〖1306〗-表明两个修订级别是不兼容的。
〖1307〗-这个安全标识不能指派为此对象的所有者。
〖1308〗-这个安全标识不能指派为对象的主要组。
〖1309〗-当前并未模拟客户的线程试图操作模拟令牌。
〖1310〗-组可能未被禁用。
〖1311〗-当前没有可用的登录服务器来服务登录请求。
〖1312〗-指定的登录会话不存在。可能已被终止。
〖1313〗-指定的特权不存在。
〖1314〗-客户没有所需的特权。
〖1315〗-提供的名称并非正确的帐户名形式。
〖1316〗-指定的用户已存在。
〖1317〗-指定的用户不存在。
〖1318〗-指定的组已存在。
〖1319〗-指定的组不存在。
〖1320〗-指定的用户帐户已是指定组的成员,或是因为组包含成员所以无法删除指定的组。
〖1321〗-指定的用户帐户不是指定组帐户的成员。
〖1322〗-无法禁用或删除最后剩余的系统管理帐户。
〖1323〗-无法更新密码。提供作为当前密码的值不正确。
〖1324〗-无法更新密码。提供给新密码的值包含密码中不允许的值。
〖1325〗-无法更新密码。为新密码提供的值不符合字符域的长度、复杂性或历史要求。
〖1326〗-登录失败: 未知的用户名或错误密码。
〖1327〗-登录失败: 用户帐户限制。
〖1328〗-登录失败: 违反帐户登录时间限制。
〖1329〗-登录失败: 不允许用户登录到此计算机。
〖1330〗-登录失败: 指定的帐户密码已过期。
〖1331〗-登录失败: 禁用当前的帐户。
〖1332〗-帐户名与安全标识间无任何映射完成。
〖1333〗-一次请求过多的本地用户标识符(LUIDs)。
〖1334〗-无更多可用的本地用户标识符(LUIDs)。
〖1335〗-对于该特别用法,安全 ID 的次级授权部分无效。
〖1336〗-访问控制列表(ACL)结构无效。
〖1337〗-安全 ID 结构无效。
〖1338〗-安全描述符结构无效。
〖1340〗-无法创建固有的访问控制列表(ACL)或访问控制项目(ACE)。
〖1341〗-服务器当前已禁用。
〖1342〗-服务器当前已启用。
〖1343〗-提供给识别代号颁发机构的值为无效值。
〖1344〗-无更多可用的内存以更新安全信息。
〖1345〗-指定属性无效,或与整个群体的属性不兼容。
〖1346〗-指定的模拟级别无效, 或所提供的模拟级别无效。
〖1347〗-无法打开匿名级安全令牌。
〖1348〗-请求的验证信息类别无效。
〖1349〗-令牌的类型对其尝试使用的方法不适当。
〖1350〗-无法在与安全性无关联的对象上运行安全性操作。
〖1351〗-未能从域控制器读取配置信息,或者是因为机器不可使用,或者是访问被拒绝。
〖1352〗-安全帐户管理器(SAM)或本地安全颁发机构(LSA)服务器处于运行安全操作的错误状态。
〖1353〗-域处于运行安全操作的错误状态。
〖1354〗-此操作只对域的主要域控制器可行。
〖1355〗-指定的域不存在,或无法联系。
〖1356〗-指定的域已存在。
〖1357〗-试图超出每服务器域个数的限制。
〖1358〗-无法完成请求操作,因为磁盘上的严重介质失败或数据结构损坏。
〖1359〗-出现了内部错误。
〖1360〗-通用访问类型包含于已映射到非通用类型的访问掩码中。
〖1361〗-安全描述符格式不正确 (绝对或自相关的)。
〖1362〗-请求操作只限制在登录进程中使用。调用进程未注册为一个登录进程。
〖1363〗-无法使用已在使用中的标识启动新的会话。
〖1364〗-未知的指定验证数据包。
〖1365〗-登录会话并非处于与请求操作一致的状态中。
〖1366〗-登录会话标识已在使用中。
〖1367〗-登录请求包含无效的登录类型值。
〖1368〗-在使用命名管道读取数据之前,无法经由该管道模拟。
〖1369〗-注册表子树的事务处理状态与请求状态不一致。
〖1370〗-安全性数据库内部出现损坏。
〖1371〗-无法在内置帐户上运行此操作。
〖1372〗-无法在内置特殊组上运行此操作。
〖1373〗-无法在内置特殊用户上运行此操作。
〖1374〗-无法从组中删除用户,因为当前组为用户的主要组。
〖1375〗-令牌已作为主要令牌使用。
〖1376〗-指定的本地组不存在。
〖1377〗-指定的帐户名不是本地组的成员。
〖1378〗-指定的帐户名已是本地组的成员。
〖1379〗-指定的本地组已存在。
〖1380〗-登录失败: 未授予用户在此计算机上的请求登录类型。
〖1381〗-已超过在单一系统中可保存机密的最大个数。
〖1382〗-机密的长度超过允许的最大长度。
〖1383〗-本地安全颁发机构数据库内部包含不一致性。
〖1384〗-在尝试登录的过程中,用户的安全上下文积累了过多的安全标识。
〖1385〗-登录失败: 未授予用户在此计算机上的请求登录类型。
〖1386〗-更改用户密码时需要交叉加密密码。
〖1387〗-由于成员不存在,无法将成员添加到本地组中,也无法从本地组将其删除。
〖1388〗-无法将新成员加入到本地组中,因为成员的帐户类型错误。
〖1389〗-已指定过多的安全标识。
〖1390〗-更改此用户密码时需要交叉加密密码。
〖1391〗-表明 ACL 未包含任何可承继的组件。
〖1392〗-文件或目录损坏且无法读取。
〖1393〗-磁盘结构损坏且无法读取。
〖1394〗-无任何指定登录会话的用户会话项。
〖1395〗-正在访问的服务有连接数目标授权限制。这时候已经无法再连接,原因是已经到达可接受的连接数目上限。
〖1396〗-登录失败: 该目标帐户名称不正确。
〖1397〗-相互身份验证失败。该服务器在域控制器的密码过期。
〖1398〗-在客户机和服务器之间有一个时间差。
〖1400〗-无效的窗口句柄。
〖1401〗-无效的菜单句柄。
〖1402〗-无效的光标句柄。
〖1403〗-无效的加速器表句柄。
〖1404〗-无效的挂钩句柄。
〖1405〗-无效的多重窗口位置结构句柄。
〖1406〗-无法创建最上层子窗口。
〖1407〗-找不到窗口类别。
〖1408〗-无效窗口;它属于另一线程。
〖1409〗-热键已注册。
〖1410〗-类别已存在。
〖1411〗-类别不存在。
〖1412〗-类别仍有打开的窗口。
〖1413〗-无效索引。
〖1414〗-无效的图标句柄。
〖1415〗-使用专用 DIALOG 窗口字。
〖1416〗-找不到列表框标识。
〖1417〗-找不到通配字符。
〖1418〗-线程没有打开的剪贴板。
〖1419〗-没有注册热键。
〖1420〗-窗口不是合法的对话窗口。
〖1421〗-找不到控件 ID。
〖1422〗-因为没有编辑控制,所以组合框的消息无效。
〖1423〗-窗口不是组合框。
〖1424〗-高度必须小于 256。
〖1425〗-无效的设备上下文(DC)句柄。
〖1426〗-无效的挂接程序类型。
〖1427〗-无效的挂接程序。
〖1428〗-没有模块句柄无法设置非本机的挂接。
〖1429〗-此挂接程序只可整体设置。
〖1430〗-Journal Hook 程序已安装。
〖1431〗-挂接程序尚未安装。
〖1432〗-单一选择列表框的无效消息。
〖1433〗-LB_SETCOUNT 发送到非被动的列表框。
〖1434〗-此列表框不支持 Tab 键宽度。
〖1435〗-无法毁坏由另一个线程创建的对象。
〖1436〗-子窗口没有菜单。
〖1437〗-窗口没有系统菜单。
〖1438〗-无效的消息对话框样式。
〖1439〗-无效的系统范围内的 (SPI_*) 参数。
〖1440〗-已锁定屏幕。
〖1441〗-多重窗口位置结构中窗口的所有句柄必须具有相同的上层。
〖1442〗-窗口不是子窗口。
〖1443〗-无效的 GW_* 命令。
〖1444〗-无效的线程标识。
〖1445〗-无法处理非多重文档界面 (MDI) 窗口中的消息。
〖1446〗-弹出式菜单已经激活。
〖1447〗-窗口没有滚动条。
〖1448〗-滚动条范围不可大于 MAXLONG。
〖1449〗-无法以指定的方式显示或删除窗口。
〖1450〗-系统资源不足,无法完成请求的服务。
〖1451〗-系统资源不足,无法完成请求的服务。
〖1452〗-系统资源不足,无法完成请求的服务。
〖1453〗-配额不足,无法完成请求的服务。
〖1454〗-配额不足,无法完成请求的服务。
〖1455〗-页面文件太小,无法完成操作。
〖1456〗-找不到菜单项。
〖1457〗-键盘布局句柄无效。
〖1458〗-不允许使用挂钩类型。
〖1459〗-该操作需要交互式窗口工作站。
〖1460〗-由于超时时间已过,该操作返回。
〖1461〗-无效监视器句柄。
〖1500〗-事件日志文件损坏。
〖1501〗-无法打开事件日志文件,事件日志服务没有启动。
〖1502〗-事件日志文件已满。
〖1503〗-事件日志文件已在读取间更改。
〖1601〗-无法访问 Windows 安装服务。请与技术支持人员联系,确认 Windows 安装服务是否注册正确。
〖1602〗-用户取消了安装。
〖1603〗-安装时发生严重错误
〖1604〗-安装已挂起,未完成。
〖1605〗-这个操作只对当前安装的产品有效。
〖1606〗-功能 ID 未注册。
〖1607〗-组件 ID 并未注册。
〖1608〗-未知属性。
〖1609〗-句柄处于不正确的状态。
〖1610〗-这个产品的配置数据已损坏。请与技术支持人员联系。
〖1611〗-组件限制语不存在。
〖1612〗-这个产品的安装来源无法使用。请验证来源是否存在,是否可以访问。
〖1613〗-Windows 安装服务无法安装这个安装程序包。您必须安装含有 Windows 安装服务新版本的 Windows Service Park。
〖1614〗-没有卸载产品。
〖1615〗-SQL 查询语法不正确或不被支持。
〖1616〗-记录字符域不存在。
〖1617〗-设备已被删除.
〖1618〗-正在进行另一个安装操作。请在继续这个安装操作之前完成那个操作。
〖1619〗-未能打开这个安装程序包。请验证程序包是否存在,是否可以访问;或者与应用程序供应商联系,验证这是否是有效的 Windows 安装服务程序包。
〖1620〗-未能打开这个安装程序包。请与应用程序供应商联系,验证这是否是有效的 Windows 安装服务程序包。
〖1621〗-启动 Windows 安装服务用户界面时有错误。请与技术支持人员联系。
〖1622〗-打开安装日志文件的错误。请验证指定的日志文件位置是否存在,是否可以写入。
〖1623〗-安装程序包的语言不受系统支持。
〖1624〗-应用变换时的错误。请验证指定的变换路径是否有效。
〖1625〗-系统策略禁止这个安装。请与系统管理员联系。
〖1626〗-无法执行函数。
〖1627〗-执行期间,函数出了问题。
〖1628〗-指定了无效的或未知的表格。
〖1629〗-提供的数据类型不对。
〖1630〗-这个类型的数据不受支持。
〖1631〗-Windows 安装服务未能启动。请与技术支持人员联系。
〖1632〗-临时文件夹已满或无法使用。请验证临时文件夹是否存在,是否可以写入。
〖1633〗-这个处理器类型不支持该安装程序包。请与产品供应商联系。
〖1634〗-组件没有在这台计算机上使用。
〖1635〗-无法打开修补程序包。请验证修补程序包是否存在,是否可以访问;或者与应用程序供应商联系,验证这是否是 Windows 安装服务的修补程序包。
〖1636〗-无法打开修补程序包。请与应用程序供应商联系,验证这是否是 Windows 安装服务的修补程序包。
〖1637〗-Windows 安装服务无法处理这个插入程序包。您必须安装含有 Windows 安装服务新版本的 Windows Service Pack。
〖1638〗-已安装这个产品的另一个版本。这个版本的安装无法继续。要配置或删除这个产品的现有版本,请用“控制面板”上的“添加/删除程序”。
〖1639〗-无效的命令行参数。有关详细的命令行帮助,请查阅 Windows 安装服务的 SDK。
〖1640〗-在终端服务远程会话期间,只有管理员有添加、删除或配置服务器软件的权限。如果您要在服务器上安装或配置软件,请与网络管理员联系。
〖1641〗-要求的操作已成功结束。要使改动生效,必须重新启动系统。
〖1642〗-Windows 安装服务无法安装升级修补程序,因为被升级的程序可能会丢失或是升级修补程序可能更新此程序的一个不同版本。请确认要被升级的程序在您的计算机上且您的升级修补程序是正确的。
〖1700〗-串绑定无效。
〖1701〗-绑定句柄类型不正确。
〖1702〗-绑定句柄无效。
〖1703〗-不支持 RPC 协议序列。
〖1704〗-RPC 协议序列无效。
〖1705〗-字符串通用唯一标识 (UUID) 无效。
〖1706〗-终结点格式无效。
〖1707〗-网络地址无效。
〖1708〗-找不到终结点。
〖1709〗-超时值无效。
〖1710〗-找不到对象通用唯一标识(UUID)。
〖1711〗-对象通用唯一标识 (UUID)已注册。
〖1712〗-类型通用唯一标识(UUID)已注册。
〖1713〗-RPC 服务器已在侦听。
〖1714〗-未登记任何协议序列。
〖1715〗-RPC 服务器未在侦听。
〖1716〗-未知的管理器类型。
〖1717〗-未知的界面。
〖1718〗-没有任何链接。
〖1719〗-无任何协议顺序。
〖1720〗-无法创建终结点。
〖1721〗-资源不足,无法完成此操作。
〖1722〗-RPC 服务器不可用。
〖1723〗-RPC 服务器过忙以致无法完成此操作。
〖1724〗-网络选项无效。
〖1725〗-在此线程中,没有使用中的远程过程调用。
〖1726〗-远程过程调用失败。
〖1727〗-远程过程调用失败且未运行。
〖1728〗-远程过程调用(RPC)协议出错。
〖1730〗-RPC 服务器不支持传送语法。
〖1732〗-不支持通用唯一标识(UUID)类型。
〖1733〗-标记无效。
〖1734〗-数组边界无效。
〖1735〗-链接不包含项目名称。
〖1736〗-名称语法无效。
〖1737〗-不支持名称语法。
〖1739〗-没有可用来创建通用唯一标识 (UUID)的网络地址。
〖1740〗-终结点是一份备份。
〖1741〗-未知的验证类型。
〖1742〗-调用的最大个数太小。
〖1743〗-字符串太长。
〖1744〗-找不到 RPC 协议顺序。
〖1745〗-过程号超出范围。
〖1746〗-绑定不包含任何验证信息。
〖1747〗-未知的验证服务。
〖1748〗-未知的验证级别。
〖1749〗-安全上下文无效。
〖1750〗-未知的授权服务。
〖1751〗-项目无效。
〖1752〗-服务器终结点无法运行操作。
〖1753〗-终结点映射表中无更多的可用终结点。
〖1754〗-未导出任何界面。
〖1755〗-项目名称不完整。
〖1756〗-版本选项无效。
〖1757〗-没有其他成员。
〖1758〗-没有内容未导出。
〖1759〗-接口没有找到。
〖1760〗-项目已存在。
〖1761〗-找不到项目。
〖1762〗-无可用的名称服务。
〖1763〗-网络地址族无效。
〖1764〗-不支持请求的操作。
〖1765〗-无可用的安全上下文以允许模拟。
〖1766〗-远程过程调用(RPC)中发生内部错误。
〖1767〗-RPC 服务器试图以零除整数。
〖1768〗-RPC 服务器中发生地址错误。
〖1769〗-RPC 服务器上的浮点操作导至以零做除数。
〖1770〗-RPC 服务器上发生浮点下溢。
〖1771〗-RPC 服务器上发生浮点上溢。
〖1772〗-自动句柄绑定的可用 RPC 服务器列表已用完。
〖1773〗-无法打开字符翻译表文件。
〖1774〗-包含字符翻译表的文件少于512 字节。
〖1775〗-在远程过程调用时,将空的上下文句柄从客户传递到主机。
〖1777〗-在远程过程调用时,上下文句柄已更改。
〖1778〗-传递到远程过程调用的绑定句柄不相符。
〖1779〗-承接体无法获得远程过程调用句柄。
〖1780〗-传递空引用指针到承接体。
〖1781〗-列举值超出范围。
〖1782〗-字节计数太小。
〖1783〗-承接体接收到坏数据。
〖1784〗-提供给请求操作的用户缓冲区无效。
〖1785〗-磁盘媒体无法识别。可能未被格式化。
〖1786〗-工作站没有信任机密。
〖1787〗-服务器上的安全数据库没有此工作站信任关系的计算机帐户。
〖1788〗-主域和受信域间的信任关系失败。
〖1789〗-此工作站和主域间的信任关系失败。
〖1790〗-网络登录失败。
〖1791〗-此线程的远程过程调用已在进行中。
〖1792〗-试图登录,但是网络登录服务没有启动。
〖1793〗-用户帐户到期。
〖1794〗-转发程序已被占用且无法卸载。
〖1795〗-指定的打印机驱动程序已安装。
〖1796〗-指定的端口未知。
〖1797〗-未知的打印机驱动程序。
〖1798〗-未知的打印机处理器。
〖1799〗-指定的分隔页文件无效。
〖1800〗-指定的优先级无效。
〖1801〗-打印机名无效。
〖1802〗-打印机已存在。
〖1803〗-打印机命令无效。
〖1804〗-指定的数据类型无效。
〖1805〗-指定的环境无效。
〖1806〗-没有更多的绑定。
〖1807〗-所用帐户为域间信任帐户。请使用您的全局用户帐户或本地用户帐户来访问这台服务器。
〖1808〗-所用帐户是一个计算机帐户。使用您的全局用户帐户或本地用户帐户来访问此服务器。
〖1809〗-已使用的帐户为服务器信任帐户。使用您的全局用户帐户或本地用户帐户来访问此服务器。
〖1810〗-指定域的名称或安全标识(SID)与该域的信任信息不一致。
〖1811〗-服务器在使用中且无法卸载。
〖1812〗-指定的映像文件不包含资源区域。
〖1813〗-找不到映像文件中指定的资源类型。
〖1814〗-找不到映像文件中指定的资源名。
〖1815〗-找不到映像文件中指定的资源语言标识。
〖1816〗-配额不足,无法处理此命令。
〖1817〗-未登记任何界面。
〖1818〗-远程过程调用被取消。
〖1819〗-绑定句柄不包含所有需要的信息。
〖1820〗-在远程过程调用过程中通讯失败。
〖1821〗-不支持请求的验证级别。
〖1822〗-未登记任何主名称。
〖1823〗-指定的错误不是有效的 Windows RPC 错误码。
〖1824〗-已配置一个只在这部计算机上有效的 UUID。
〖1825〗-发生一个安全包特有的错误。
〖1826〗-线程未取消。
〖1827〗-无效的编码/解码句柄操作。
〖1828〗-序列化包装的版本不兼容。
〖1829〗-RPC 承接体的版本不兼容。
〖1830〗-RPC 管道对象无效或已损坏。
〖1831〗-试图在 RPC 管道物件上进行无效操作。
〖1832〗-不被支持的 RPC 管道版本。
〖1898〗-找不到该组成员。
〖1899〗-无法创建终结点映射表数据库项。
〖1900〗-对象通用唯一标识 (UUID) 为 nil UUID。
〖1901〗-指定的时间无效。
〖1902〗-指定的格式名称无效。
〖1903〗-指定的格式大小无效。
〖1904〗-指定的打印机句柄正等候在
〖1905〗-已删除指定的打印机。
〖1906〗-打印机的状态无效。
〖1907〗-在第一次登录之前,必须更改用户密码。
〖1908〗-找不到此域的域控制器。
〖1909〗-引用的帐户当前已锁定,且可能无法登录。
〖1910〗-没有发现指定的此对象导出者
〖1911〗-没有发现指定的对象。
〖1912〗-没有发现指定的对象解析器。
〖1913〗-一些待发数据仍停留在请求缓冲区内。
〖1914〗-无效的异步远程过程调用句柄。
〖1915〗-这个操作的异步 RPC 调用句柄不正确。
〖1916〗-RPC 管道对象已经关闭。
〖1917〗-在 RPC 调用完成之前全部的管道都已处理完成。
〖1918〗-没有其他可用的数据来自 RPC 管道。
〖1919〗-这个机器没有可用的站点名。
〖1920〗-系统无法访问此文件。
〖1921〗-系统无法辨识文件名。
〖1922〗-项目不是所要的类型。
〖1923〗-无法将所有对象的 UUID 导出到指定的项。
〖1924〗-无法将界面导出到指定的项。
〖1925〗-无法添加指定的配置文件项。
〖1926〗-无法添加指定的配置文件元素。
〖1927〗-无法删除指定的配置文件元素。
〖1928〗-无法添加组元素。
〖1929〗-无法删除组元素。
〖2000〗-无效的像素格式。
〖2001〗-指定的驱动程序无效。
〖2002〗-窗口样式或类别属性对此操作无效。
〖2003〗-不支持请求的图元操作。
〖2004〗-不支持请求的变换操作。
〖2005〗-不支持请求的剪切操作。
〖2010〗-指定的颜色管理模块无效。
〖2011〗-制定的颜色文件配置无效。
〖2012〗-找不到指定的标识。
〖2013〗-找不到所需的标识。
〖2014〗-指定的标识已经存在。
〖2015〗-指定的颜色文件配置与任何设备都不相关。
〖2016〗-找不到该指定的颜色文件配置
〖2017〗-指定的颜色空间无效。
〖2018〗-图像颜色管理没有启动。
〖2019〗-在删除该颜色传输时有一个错误。
〖2020〗-该指定的颜色传输无效。
〖2021〗-该指定的变换与位图的颜色空间不匹配。
〖2022〗-该指定的命名颜色索引在配置文件中不存在。
〖2102〗-没有安装工作站驱动程序。
〖2103〗-无法定位服务器。
〖2104〗-发生内部错误,网络无法访问共享内存段。
〖2105〗-网络资源不足。
〖2106〗-工作站不支持这项操作。
〖2107〗-设备没有连接。
〖2108〗-网络连接已成功,但需要提示用户输入一个不同于原始指定的密码。
〖2114〗-没有启动服务器服务。
〖2115〗-队列空。
〖2116〗-设备或目录不存在。
〖2117〗-无法在重定向的资源上执行这项操作。
〖2118〗-名称已经共享。
〖2119〗-服务器当前无法提供所需的资源。
〖2121〗-额外要求的项目超过允许的上限。
〖2122〗-对等服务只支持两个同时操作的用户 。
〖2123〗-API 返回缓冲区太小。
〖2127〗-远程 API 错误。
〖2131〗-打开或读取配置文件时出错。
〖2136〗-发生一般网络错误。
〖2137〗-工作站服务的状态不一致。重新启动工作站服务之前,请先重新启动计算机。
〖2138〗-工作站服务没有启动。
〖2139〗-所需信息不可用。
〖2140〗-发生 Windows 2000 内部错误。
〖2141〗-服务器没有设置事务处理。
〖2142〗-远程服务器不支持请求的 API。
〖2143〗-事件名无效。
〖2144〗-网络上已经有此计算机名。请更名后重新启动。
〖2146〗-配置信息中找不到指定的组件。
〖2147〗-配置信息中找不到指定的参数。
〖2149〗-配置文件中有一个命令行太长。
〖2150〗-打印机不存在。
〖2151〗-打印作业不存在。
〖2152〗-打印机目标找不到。
〖2153〗-打印机目标已经存在。
〖2154〗-打印机队列已经存在。
〖2155〗-无法添加其它的打印机。
〖2156〗-无法添加其它的打印作业。
〖2157〗-无法添加其它的打印机目标。
〖2158〗-此打印机目标处于空闲中,不接受控制操作。
〖2159〗-此“打印机目标请求”包含无效的控制函数。
〖2160〗-打印处理程序没有响应。
〖2161〗-后台处理程序没有运行。
〖2162〗-打印目标当前的状况,无法执行这项操作。
〖2163〗-打印机队列当前的状况,无法执行这项操作。
〖2164〗-打印作业当前的状况,无法执行这项操作。
〖2165〗-无法为后台处理程序分配内存。
〖2166〗-设备驱动程序不存在。
〖2167〗-打印处理程序不支持这种数据类型。
〖2168〗-没有安装打印处理程序。
〖2180〗-锁定服务数据库。
〖2181〗-服务表已满。
〖2182〗-请求的服务已经启动。
〖2183〗-这项服务没有响应控制操作。
〖2184〗-服务仍未启动。
〖2185〗-服务名无效。
〖2186〗-服务没有响应控制功能。
〖2187〗-服务控制处于忙碌状态。
〖2188〗-配置文件包含无效的服务程序名。
〖2189〗-在当前的状况下无法控制服务。
〖2190〗-服务异常终止。
〖2191〗-这项服务无法接受请求的 "暂停" 或 "停止" 操作。
〖2192〗-服务控制“计划程序”在“计划表”中找不到服务名。
〖2193〗-无法读取服务控制计划程序管道。
〖2194〗-无法创建新服务的线程。
〖2200〗-此工作站已经登录到局域网。
〖2201〗-工作站没有登录到局域网。
〖2202〗-指定的用户名无效。
〖2203〗-密码参数无效。
〖2204〗-登录处理器没有添加消息别名。
〖2205〗-登录处理器没有添加消息别名。
〖2206〗-注销处理器没有删除消息别名。
〖2207〗-注销处理器没有删除消息别名。
〖2209〗-暂停网络登录。
〖2210〗-中心登录服务器发生冲突。
〖2211〗-服务器没有设置正确的用户路径。
〖2212〗-加载或运行登录脚本时出错。
〖2214〗-没有指定登录服务器,计算机的登录状态是单机操作。
〖2215〗-登录服务器找不到。
〖2216〗-此计算机已经有一个登录域。
〖2217〗-登录服务器无法验证登录。
〖2219〗-安全数据库找不到。
〖2220〗-组名找不到。
〖2221〗-用户名找不到。
〖2222〗-资源名找不到。
〖2223〗-组已经存在。
〖2224〗-帐户已经存在。
〖2225〗-资源使用权限清单已经存在。
〖2226〗-此操作只能在该域的主域控制器上执行。
〖2227〗-安全数据库没有启动。
〖2228〗-用户帐户数据库中的名称太多。
〖2229〗-磁盘 I/O 失败。
〖2230〗-已经超过每个资源 64 个项目的限制。
〖2231〗-不得删除带会话的用户。
〖2232〗-上层目录找不到。
〖2233〗-无法添加到安全数据库会话高速缓存段。
〖2234〗-这项操作不能在此特殊的组上执行。
〖2235〗-用户帐户数据库会话高速缓存没有记录此用户。
〖2236〗-用户已经属于此组。
〖2237〗-用户不属于此组。
〖2238〗-此用户帐户尚未定义。
〖2239〗-此用户帐户已过期。
〖2240〗-此用户不得从此工作站登录网络。
〖2241〗-这时候不允许用户登录网络。
〖2242〗-此用户的密码已经过期。
〖2243〗-此用户的密码无法更改。
〖2244〗-现在无法使用此密码。
〖2245〗-密码不满足密码策略的需要。检查最小密码长度、密码复杂性和密码历史的需求。
〖2246〗-此用户的密码最近才启用,现在不能更改。
〖2247〗-安全数据库已损坏。
〖2248〗-不需要更新此副本复制的网络/本地安全数据库。
〖2249〗-此副本复制的数据库已过时;请同步处理其中的数据。
〖2250〗-此网络连接不存在。
〖2251〗-此 asg_type 无效。
〖2252〗-此设备当前正在共享中。
〖2270〗-计算机名无法作为消息别名添加。网络上可能已经有此名称。
〖2271〗-信使服务已经启动。
〖2272〗-信使服务启动失败。
〖2273〗-网络上找不到此消息别名。
〖2274〗-此消息别名已经转发出去。
〖2275〗-已经添加了此消息别名,但是仍被转发。
〖2276〗-此消息别名已在本地存在。
〖2277〗-添加的消息别名已经超过数目上限。
〖2278〗-无法删除计算机名。
〖2279〗-消息无法转发回到同一个工作站。
〖2280〗-域消息处理器出错。
〖2281〗-消息已经发送出去,但是收件者已经暂停信使服务。
〖2282〗-消息已经发送出去,但尚未收到。
〖2283〗-消息别名当前正在使用中。请稍候片刻再试。
〖2284〗-信使服务尚未启动。
〖2285〗-该名称不在本地计算机上。
〖2286〗-网络上找不到转发的消息别名。
〖2287〗-远程通讯站的消息别名表已经满了。
〖2288〗-此别名的消息当前没有在转发中。
〖2289〗-广播的消息被截断。
〖2294〗-设备名无效。
〖2295〗-写入出错。
〖2297〗-网络上的消息别名重复。
〖2298〗-此消息别名会在稍后删除。
〖2299〗-没有从所有的网络删除消息别名。
〖2300〗-这项操作无法在使用多种网络的计算机上执行。
〖2310〗-此共享的资源不存在。
〖2311〗-设备没有共享。
〖2312〗-带此计算机名的会话不存在。
〖2314〗-没有用此识别号打开的文件。
〖2315〗-执行远程管理命令失败。
〖2316〗-打开远程临时文件失败。
〖2317〗-从远程管理命令返回的数据已经被截断成 64K。
〖2318〗-此设备无法同时共享为后台处理资源和非后台处理资源。
〖2319〗-服务器清单中的信息可能不正确
〖2320〗-计算机在此域未处于活动状态
〖2321〗-在删除共享之前,需要将该共享从分布式文件系统中删除。
〖2331〗-无法在此设备执行这项操作
〖2332〗-此设备无法共享。
〖2333〗-此设备未打开。
〖2334〗-此设备名清单无效。
〖2335〗-队列优先级无效。
〖2337〗-没有任何共享的通讯设备。
〖2338〗-指定的队列不存在。
〖2340〗-此设备清单无效。
〖2341〗-请求的设备无效。
〖2342〗-后台处理程序正在使用此设备。
〖2343〗-此设备已经被当成通讯设备来使用。
〖2351〗-此计算机名无效。
〖2354〗-指定的字符串及前缀太长。
〖2356〗-此路径组成部分无效。
〖2357〗-无法判断输入类型。
〖2362〗-类型缓冲区不够大。
〖2370〗-配置文件不得超过 64K。
〖2371〗-初始偏移量越界。
〖2372〗-系统无法删除当前到网络资源的连接。
〖2373〗-系统无法分析此文件中的命令行。
〖2374〗-加载配置文件时出错。\
〖2375〗-保存配置文件时出错,只部份地保存了配置文件。
〖2378〗-此日志文件在前后两次读取之间已经发生变化。
〖2380〗-资源路径不可以是目录。
〖2381〗-资源路径无效。
〖2382〗-目标路径无效。
〖2383〗-源路径及目标路径分属不同的服务器。
〖2385〗-请求的 Run 服务器现在暂停。
〖2389〗-与 Run 服务器通讯时出错。
〖2391〗-启动后台处理时出错。
〖2392〗-找不到您连接的共享资源。
〖2400〗-LAN 适配器号码无效。
〖2401〗-此网络连接有文件打开或请求挂起。
〖2402〗-使用中的连接仍存在。
〖2403〗-此共享名或密码无效。
〖2404〗-设备正由活动进程使用,无法断开。
〖2405〗-此驱动器号已在本地使用。
〖2430〗-指定的客户已经在指定的事件注册。
〖2431〗-警报表已满。
〖2432〗-发出的警报名称无效或不存在。
〖2433〗-警报接收者无效。
〖2434〗-用户的登录时间长短不再合法。所以已经删除用户与该服务器的会话。
〖2440〗-日志文件中没有请求的记录号。
〖2450〗-用户帐户数据库没有正确配置。
〖2451〗-当 Netlogon 服务正在运行时,不允许执行这项操作。
〖2452〗-这项操作无法在最后的管理帐户上执行。
〖2453〗-找不到此域的域控制器。
〖2454〗-无法设置此用户的登录信息。
〖2455〗-Netlogon 服务尚未启动。
〖2456〗-无法添加到用户帐户数据库。
〖2457〗-此服务器的时钟与主域控制器的时钟不一致。
〖2458〗-检测到密码不匹配。
〖2460〗-服务器识别码没有指定有效的服务器。
〖2461〗-会话标识没有指定有效的会话。
〖2462〗-连接识别码没有指定有效的连接。
〖2463〗-可用服务器表中无法再加上其它项。
〖2464〗-服务器已经到了支持的会话数目上限。
〖2465〗-服务器已经到了支持的连接数目上限。
〖2466〗-服务器打开的文件到了上限,无法打开更多文件。
〖2467〗-这台服务器没有登记替换的服务器。
〖2470〗-请用低级的 API (远程管理协议)。
〖2480〗-UPS 服务无法访问 UPS 驱动程序。
〖2481〗-UPS 服务设置错误。
〖2482〗-UPS 服务无法访问指定通讯端口 (Comm Port)。
〖2483〗-UPS 显示线路中断或电池不足,服务没有启动。
〖2484〗-UPS 服务无法执行系统关机的操作。
〖2500〗-下面的程序返回一个 MS-DOS 错误码:
〖2501〗-下面的程序需要更多的内存:
〖2502〗-下面程序调用了不支持的 MS-DOS 函数:
〖2503〗-工作站无法启动。
〖2504〗-下面的文件已损坏。
〖2505〗-启动块定义文件中没有指定引导程序。
〖2506〗-NetBIOS 返回错误: NCB 及 SMB 数据转储。
〖2507〗-磁盘 I/O 错误。
〖2508〗-无法替换映像参数。
〖2509〗-跨越磁盘扇区范围的映像参数太多。
〖2510〗-不是从用 /S 格式化的 MS-DOS软盘产生的映像。
〖2511〗-稍后会从远程重新启动。
〖2512〗-无法调用远程启动服务器。
〖2513〗-无法连接到远程启动服务器。
〖2514〗-无法打开远程启动服务器上的映像文件。
〖2515〗-正在连接到远程启动服务器...
〖2516〗-正在连接到远程启动服务器...
〖2517〗-远程启动服务已经停止,请检测错误记录文件,查明出错的原因。
〖2518〗-远程启动失败,请检查错误日志文件,查明出错的原因。
〖2519〗-不允许第二个远程启动 (Remoteboot) 资源连接。
〖2550〗-浏览服务设置成 MaintainServerList=No。
〖2610〗-因为没有网卡与这项服务一起启动,所以无法启动服务。
〖2611〗-因为注册表中的启动信息不正确,所以无法启动服务。
〖2612〗-无法启动服务,原因是它的数据库找不到或损坏。
〖2613〗-因为找不到 RPLFILES 共享的资源,所以无法启动服务。
〖2614〗-因为找不到 RPLUSER 组,所以无法启动服务。
〖2615〗-无法枚举服务记录。
〖2616〗-工作站记录信息已损坏。
〖2617〗-工作站记录找不到。
〖2618〗-其它的工作站正在使用此工作站名。
〖2619〗-配置文件记录已损坏。
〖2620〗-配置文件记录找不到。
〖2621〗-其它的配置文件正在使用此名称。
〖2622〗-有很多工作站正在使用此配置文件。
〖2623〗-配置记录已损坏。
〖2624〗-配置记录找不到。
〖2625〗-适配器识别记录已损坏。
〖2626〗-内部服务出错。
〖2627〗-供应商识别记录已损坏。
〖2628〗-启动块记录已损坏。
〖2629〗-找不到此工作站的用户帐户记录。
〖2630〗-RPLUSER 本地组找不到。
〖2631〗-找不到启动块记录。
〖2632〗-所选的配置文件与此工作站不兼容。
〖2633〗-其它的工作站正在使用所选的网卡。
〖2634〗-有些配置文件正在使用此配置。
〖2635〗-有数个工作站、配置文件或配置正在使用此启动块。
〖2636〗-服务无法制作远程启动数据库的备份。
〖2637〗-找不到适配器记录。
〖2638〗-找不到供应商记录。
〖2639〗-其它供应商记录正在使用此供应商名称。
〖2640〗-其它的启动区记录正在使用启动名称或供应商识别记录。
〖2641〗-其它的配置正在使用此配置名称。
〖2660〗-由 Dfs 服务所维护的内部数据库已损坏
〖2661〗-内部数据库中的一条记录已 损坏
〖2662〗-输入项路径与卷路径不匹配
〖2663〗-给定卷名已存在
〖2664〗-指定的服务器共享已在 Dfs 中共享
〖2665〗-所显示的服务器共享不支持所显示的 Dfs 卷
〖2666〗-此操作在非叶卷上无效。
〖2667〗-此操作在叶卷上无效。
〖2668〗-此操作不明确,因为该卷存在多服务器。
〖2669〗-无法创建连接点
〖2670〗-该服务器不是 Dfs 可识别的
〖2671〗-指定的重命名目标路径无效。
〖2672〗-指定 Dfs 卷脱线
〖2673〗-指定的服务器不为此卷服务
〖2674〗-检测到 Dfs 名中的环路
〖2675〗-在基于服务器的 Dfs 上不支持该操作
〖2676〗-这个卷已经受该指定服务器共享支持
〖2677〗-无法删除这个卷的上一个服务器共享支持
〖2678〗-Inter-Dfs 卷不支持该操作
〖2679〗-Dfs 服务的内部状态已经变得不一致
〖2680〗-Dfs 服务已经安装在指定的服务器上
〖2681〗-被协调的 Dfs 数据是一样的
〖2682〗-无法删除 Dfs 根目录卷 - 如需要请卸载 Dfs
〖2683〗-该共享的子目录或父目录已经存在在一个 Dfs 中
〖2690〗-Dfs 内部错误
〖2691〗-这台机器已经加入域 。
〖2692〗-这个机器目前未加入域。
〖2693〗-这台机器是域控制器,而且无法从域中退出。
〖2694〗-目标域控制器不支持在 OU 中创建的机器帐户。
〖2695〗-指定的工作组名无效
〖2696〗-指定的计算机名与域控制器上使用的默认语言不兼容。
〖2697〗-找不到指定的计算机帐户。
〖2999〗-这是 NERR 范围内的最后一个错误。
〖1〗-功能错误。
〖2〗-系统找不到指定的文件。
〖3〗-系统找不到指定的路径。
〖4〗-系统无法打开文件。
〖5〗-拒绝访问。
〖6〗-句柄无效。
〖7〗-存储控制块被损坏。
〖8〗-存储空间不足,无法处理此命令。
〖9〗-存储控制块地址无效。
〖10〗-环境错误。
〖11〗-试图加载格式错误的程序。
〖12〗-访问码无效。
〖13〗-数据无效。
〖14〗-存储器不足,无法完成此操作。
〖15〗-系统找不到指定的驱动器。
〖16〗-无法删除目录。
〖17〗-系统无法将文件移到不同的驱动器。
〖18〗-没有更多文件。
〖19〗-介质受写入保护。
〖20〗-系统找不到指定的设备。
〖21〗-设备未就绪。
〖22〗-设备不识别此命令。
〖23〗-数据错误 (循环冗余检查)。
〖24〗-程序发出命令,但命令长度不正确。
〖25〗-驱动器无法找出磁盘上特定区域或磁道的位置。
〖26〗-无法访问指定的磁盘或软盘。
〖27〗-驱动器找不到请求的扇区。
〖28〗-打印机缺纸。
〖29〗-系统无法写入指定的设备。
〖30〗-系统无法从指定的设备上读取。
〖31〗-连到系统上的设备没有发挥作用。
〖32〗-进程无法访问文件,因为另一个程序正在使用此文件。
〖33〗-进程无法访问文件,因为另一个程序已锁定文件的一部分。
〖36〗-用来共享的打开文件过多。
〖38〗-到达文件结尾。
〖39〗-磁盘已满。
〖50〗-不支持网络请求。
〖51〗-远程计算机不可用 。
〖52〗-在网络上已有重复的名称。
〖53〗-找不到网络路径。
〖54〗-网络忙。
〖55〗-指定的网络资源或设备不再可用。
〖56〗-已到达网络 BIOS 命令限制。
〖57〗-网络适配器硬件出错。
〖58〗-指定的服务器无法运行请求的操作。
〖59〗-发生意外的网络错误。
〖60〗-远程适配器不兼容。
〖61〗-打印机队列已满。
〖62〗-无法在服务器上获得用于保存待打印文件的空间。
〖63〗-删除等候打印的文件。
〖64〗-指定的网络名不再可用。
〖65〗-拒绝网络访问。
〖66〗-网络资源类型错误。
〖67〗-找不到网络名。
〖68〗-超过本地计算机网卡的名称限制。
〖69〗-超出网络 BIOS 会话限制。
〖70〗-远程服务器已暂停,或正在启动过程中。
〖71〗-当前已无法再同此远程计算机连接,因为已达到计算机的连接数目极限。
〖72〗-已暂停指定的打印机或磁盘设备。
〖80〗-文件存在。
〖82〗-无法创建目录或文件。
〖83〗-INT 24 失败。
〖84〗-无法取得处理此请求的存储空间。
〖85〗-本地设备名已在使用中。
〖86〗-指定的网络密码错误。
〖87〗-参数错误。
〖88〗-网络上发生写入错误。
〖89〗-系统无法在此时启动另一个进程。
〖100〗-无法创建另一个系统信号灯。
〖101〗-另一个进程拥有独占的信号灯。
〖102〗-已设置信号灯且无法关闭。
〖103〗-无法再设置信号灯。
〖104〗-无法在中断时请求独占的信号灯。
〖105〗-此信号灯的前一个所有权已结束。
〖107〗-程序停止,因为替代的软盘未插入。
〖108〗-磁盘在使用中,或被另一个进程锁定。
〖109〗-管道已结束。
〖110〗-系统无法打开指定的设备或文件。
〖111〗-文件名太长。
〖112〗-磁盘空间不足。
〖113〗-无法再获得内部文件的标识。
〖114〗-目标内部文件的标识不正确。
〖117〗-应用程序制作的 IOCTL 调用错误。
〖118〗-验证写入的切换参数值错误。
〖119〗-系统不支持请求的命令。
〖120〗-此功能只被此系统支持。
〖121〗-信号灯超时时间已到。
〖122〗-传递到系统调用的数据区太小。
〖123〗-文件名、目录名或卷标语法不正确。
〖124〗-系统调用级别错误。
〖125〗-磁盘没有卷标。
〖126〗-找不到指定的模块。
〖127〗-找不到指定的程序。
〖128〗-没有等候的子进程。
〖130〗-试图使用操作(而非原始磁盘 I/O)的已打开磁盘分区的文件句柄。
〖131〗-试图移动文件指针到文件开头之前。
〖132〗-无法在指定的设备或文件上设置文件指针。
〖133〗-包含先前加入驱动器的驱动器无法使用 JOIN 或 SUBST 命令。
〖134〗-试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令。
〖135〗-试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令。
〖136〗-系统试图解除未合并驱动器的 JOIN。
〖137〗-系统试图解除未替代驱动器的 SUBST。
〖138〗-系统试图将驱动器合并到合并驱动器上的目录。
〖139〗-系统试图将驱动器替代为替代驱动器上的目录。
〖140〗-系统试图将驱动器合并到替代驱动器上的目录。
〖141〗-系统试图替代驱动器为合并驱动器上的目录。
〖142〗-系统无法在此时运行 JOIN 或 SUBST。
〖143〗-系统无法将驱动器合并到或替代为相同驱动器上的目录。
〖144〗-目录并非根目录下的子目录。
〖145〗-目录非空。
〖146〗-指定的路径已在替代中使用。
〖147〗-资源不足,无法处理此命令。
〖148〗-指定的路径无法在此时使用。
〖149〗-企图将驱动器合并或替代为驱动器上目录是上一个替代的目标的驱动器。
〖150〗-系统跟踪信息未在 CONFIG.SYS 文件中指定,或不允许跟踪。
〖151〗-为 DosMuxSemWait 指定的信号灯事件个数错误。
〖152〗-DosMuxSemWait 不可运行。已设置过多的信号灯。
〖153〗-DosMuxSemWait 清单错误。
〖154〗-输入的卷标超过目标文件系统的长度限制
〖155〗-无法创建另一个线程。
〖156〗-接收进程已拒绝此信号。
〖157〗-段已被放弃且无法锁定。
〖158〗-段已解除锁定。
〖159〗-线程标识的地址错误。
〖160〗-传递到 DosExecPgm 的参数字符串错误。
〖161〗-指定的路径无效。
〖162〗-信号已暂停。
〖164〗-无法在系统中创建更多的线程。
〖167〗-无法锁定文件区域。
〖170〗-请求的资源在使用中。
〖173〗-对于提供取消区域进行锁定的请求不明显。
〖174〗-文件系统不支持锁定类型的最小单元更改。
〖180〗-系统检测出错误的段号。
〖183〗-当文件已存在时,无法创建该文件。
〖186〗-传递的标志错误。
〖187〗-找不到指定的系统信号灯名称。
〖196〗-操作系统无法运行此应用程序。
〖197〗-操作系统当前的配置不能运行此应用程序。
〖199〗-操作系统无法运行此应用程序。
〖200〗-代码段不可大于或等于 64K。
〖203〗-操作系统找不到已输入的环境选项。
〖205〗-命令子树中的进程没有信号处理程序。
〖206〗-文件名或扩展名太长。
〖207〗-第 2 环堆栈已被占用。
〖208〗-没有正确输入文件名通配符 * 或 ?,或指定过多的文件名通配符。
〖209〗-正在发送的信号错误。
〖210〗-无法设置信号处理程序。
〖212〗-段已锁定且无法重新分配。
〖214〗-连到该程序或动态链接模块的动态链接模块太多。
〖215〗-无法嵌套调用 LoadModule。
〖230〗-管道状态无效。
〖231〗-所有的管道实例都在使用中。
〖232〗-管道正在关闭中。
〖233〗-管道的另一端上无任何进程。
〖234〗-更多数据可用。
〖240〗-取消会话。
〖254〗-指定的扩展属性名无效。
〖255〗-扩展属性不一致。
〖258〗-等待的操作过时。
〖259〗-没有可用的数据了。
〖266〗-无法使用复制功能。
〖267〗-目录名无效。
〖275〗-扩展属性在缓冲区中不适用。
〖276〗-装在文件系统上的扩展属性文件已损坏。
〖277〗-扩展属性表格文件已满。
〖278〗-指定的扩展属性句柄无效。
〖282〗-装入的文件系统不支持扩展属性。
〖288〗-企图释放并非呼叫方所拥有的多用户终端运行程序。
〖298〗-发向信号灯的请求过多。
〖299〗-仅完成部分的 ReadProcessMemoty 或 WriteProcessMemory 请求。
〖300〗-操作锁定请求被拒绝。
〖301〗-系统接收了一个无效的操作锁定确认。
〖487〗-试图访问无效的地址。
〖534〗-算术结果超过 32 位。
〖535〗-管道的另一端有一进程。
〖536〗-等候打开管道另一端的进程。
〖994〗-拒绝访问扩展属性。
〖995〗-由于线程退出或应用程序请求,已放弃 I/O 操作。
〖996〗-重叠 I/O 事件不在信号状态中。
〖997〗-重叠 I/O 操作在进行中。
〖998〗-内存分配访问无效。
〖999〗-错误运行页内操作。
〖1001〗-递归太深;栈溢出。
〖1002〗-窗口无法在已发送的消息上操作。
〖1003〗-无法完成此功能。
〖1004〗-无效标志。
〖1005〗-此卷不包含可识别的文件系统。请确定所有请求的文件系统驱动程序已加载,且此卷未损坏。
〖1006〗-文件所在的卷已被外部改变,因此打开的文件不再有效。
〖1007〗-无法在全屏幕模式下运行请求的操作。
〖1008〗-试图引用不存在的令牌。
〖1009〗-配置注册表数据库损坏。
〖1010〗-配置注册表项无效。
〖1011〗-无法打开配置注册表项。
〖1012〗-无法读取配置注册表项。
〖1013〗-无法写入配置注册表项。
〖1014〗-注册表数据库中的某一文件必须使用记录或替代复制来恢复。恢复成功完成。
〖1015〗-注册表损坏。包含注册表数据的某一文件结构损坏,或系统的文件内存映像损坏,或因为替代副本、日志缺少或损坏而无法恢复文件。
〖1016〗-由注册表启动的 I/O 操作恢复失败。注册表无法读入、写出或清除任意一个包含注册表系统映像的文件。
〖1017〗-系统试图加载或还原文件到注册表,但指定的文件并非注册表文件格式。
〖1018〗-试图在标记为删除的注册表项上运行不合法的操作。
〖1019〗-系统无法配置注册表日志中所请求的空间。
〖1020〗-无法在已有子项或值的注册表项中创建符号链接。
〖1021〗-无法在易变父项下创建稳定子项。
〖1022〗-通知更改请求正在完成中,且信息并未返回到呼叫方的缓冲区中。当前呼叫方必须枚举文件来查找更改。
〖1051〗-已发送停止控制到服务,该服务被其它正在运行的服务所依赖。
〖1052〗-请求的控件对此服务无效
〖1053〗-服务并未及时响应启动或控制请求。
〖1054〗-无法创建此服务的线程。
〖1055〗-锁定服务数据库。
〖1056〗-服务的实例已在运行中。
〖1057〗-帐户名无效或不存在,或者密码对于指定的帐户名无效。
〖1058〗-无法启动服务,原因可能是它被禁用或与它相关联的设备没有启动。
〖1059〗-指定了循环服务依存。
〖1060〗-指定的服务并未以已安装的服务存在。
〖1061〗-服务无法在此时接受控制信息。
〖1062〗-服务未启动。
〖1063〗-服务进程无法连接到服务控制器上。
〖1064〗-当处理控制请求时,在服务中发生异常。
〖1065〗-指定的数据库不存在。
〖1066〗-服务已返回特定的服务错误码。
〖1067〗-进程意外终止。
〖1068〗-依存服务或组无法启动。
〖1069〗-由于登录失败而无法启动服务。
〖1070〗-启动后,服务停留在启动暂停状态。
〖1071〗-指定的服务数据库锁定无效。
〖1072〗-指定的服务已标记为删除。
〖1073〗-指定的服务已存在。
〖1074〗-系统当前以最新的有效配置运行。
〖1075〗-依存服务不存在,或已被标记为删除。
〖1076〗-已接受使用当前引导作为最后的有效控制设置。
〖1077〗-上次启动之后,仍未尝试引导服务。
〖1078〗-名称已用作服务名或服务显示名。
〖1079〗-此服务的帐户不同于运行于同一进程上的其它服务的帐户。
〖1080〗-只能为 Win32 服务设置失败操作,不能为驱动程序设置。
〖1081〗-这个服务所运行的处理和服务控制管理器相同。所以,如果服务处理程序意外中止的话,服务控制管理器无法进行任何操作。
〖1082〗-这个服务尚未设置恢复程序。
〖1083〗-配置成在该可执行程序中运行的这个服务不能执行该服务。
〖1100〗-已达磁带的实际结尾。
〖1101〗-磁带访问已达文件标记。
〖1102〗-已达磁带或磁盘分区的开头。
〖1103〗-磁带访问已达一组文件的结尾。
〖1104〗-磁带上不再有任何数据。
〖1105〗-磁带无法分区。
〖1106〗-在访问多卷分区的新磁带时,当前的块大小不正确。
〖1107〗-当加载磁带时,找不到分区信息。
〖1108〗-无法锁定媒体弹出功能。
〖1109〗-无法卸载介质。
〖1110〗-驱动器中的介质可能已更改。
〖1111〗-复位 I/O 总线。
〖1112〗-驱动器中没有媒体。
〖1113〗-在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符。
〖1114〗-动态链接库 (DLL) 初始化例程失败。
〖1115〗-系统关机正在进行。
〖1116〗-因为没有任何进行中的关机过程,所以无法中断系统关机。
〖1117〗-因为 I/O 设备错误,所以无法运行此项请求。
〖1118〗-没有串行设备被初始化成功。串行驱动程序将卸载。
〖1119〗-无法打开正在与其他设备共享中断请求(IRQ)的设备。至少有一个使用该 IRQ 的其他设备已打开。
〖1120〗-序列 I/O 操作已由另一个串行口的写入完成。(IOCTL_SERIAL_XOFF_COUNTER 已达零。)
〖1121〗-因为已过超时时间,所以串行 I/O 操作完成。(IOCTL_SERIAL_XOFF_COUNTER 未达零。)
〖1122〗-在软盘上找不到 ID 地址标记。
〖1123〗-软盘扇区 ID 字符域与软盘控制器磁道地址不相符。
〖1124〗-软盘控制器报告软盘驱动程序不能识别的错误。
〖1125〗-软盘控制器返回与其寄存器中不一致的结果。
〖1126〗-当访问硬盘时,重新校准操作失败,重试仍然失败。
〖1127〗-当访问硬盘时,磁盘操作失败,重试仍然失败。
〖1128〗-当访问硬盘时,即使失败,仍须复位磁盘控制器。
〖1129〗-已达磁带结尾。
〖1130〗-服务器存储空间不足,无法处理此命令。
〖1131〗-检测出潜在的死锁状态。
〖1132〗-指定的基址或文件偏移量没有适当对齐。
〖1140〗-改变系统供电状态的尝试被另一应用程序或驱动程序否决。
〖1141〗-系统 BIOS 改变系统供电状态的尝试失败。
〖1142〗-试图在一文件上创建超过系统允许数额的链接。
〖1150〗-指定程序要求更新的 Windows 版本。
〖1151〗-指定程序不是 Windows 或 MS-DOS 程序。
〖1152〗-只能启动该指定程序的一个实例。
〖1153〗-该指定程序适用于旧的 Windows 版本。
〖1154〗-执行该应用程序所需的库文件之一被损坏。
〖1155〗-没有应用程序与此操作的指定文件有关联。
〖1156〗-在输送指令到应用程序的过程中出现错误。
〖1157〗-执行该应用程序所需的库文件之一无法找到。
〖1158〗-当前程序已使用了 Window 管理器对象的系统允许的所有句柄。
〖1159〗-消息只能与同步操作一起使用。
〖1160〗-指出的源元素没有媒体。
〖1161〗-指出的目标元素已包含媒体。
〖1162〗-指出的元素不存在。
〖1163〗-指出的元素是未显示的存储资源的一部分。
〖1164〗-显示设备需要重新初始化,因为硬件有错误。
〖1165〗-设备显示在尝试进一步操作之前需要清除。
〖1166〗-设备显示它的门仍是打开状态。
〖1167〗-设备没有连接。
〖1168〗-找不到元素。
〖1169〗-索引中没有同指定项相匹配的项。
〖1170〗-在对象上不存在指定的属性集。
〖1171〗-传递到 GetMouseMovePoints 的点不在缓冲区中。
〖1172〗-跟踪(工作站)服务没运行。
〖1173〗-找不到卷 ID。
〖1175〗-无法删除要被替换的文件。
〖1176〗-无法将替换文件移到要被替换的文件。要被替换的文件保持原来的名称。
〖1177〗-无法将替换文件移到要被替换的文件。要被替换的文件已被重新命名为备份名称。
〖1178〗-卷更改记录被删除。
〖1179〗-卷更改记录服务不处于活动中。
〖1180〗-找到一份文件,但是可能不是正确的文件。
〖1181〗-日志项从日志中被删除。
〖1200〗-指定的设备名无效。
〖1201〗-设备当前未连接上,但其为一个记录连接。
〖1202〗-企图记录先前已被记录的设备。
〖1203〗-无任何网络提供程序接受指定的网络路径。
〖1204〗-指定的网络提供程序名称无效。
〖1205〗-无法打开网络连接配置文件。
〖1206〗-网络连接配置文件损坏。
〖1207〗-无法枚举空载体。
〖1208〗-发生扩展错误。
〖1209〗-指定的组名格式无效。
〖1210〗-指定的计算机名格式无效。
〖1211〗-指定的事件名格式无效。
〖1212〗-指定的域名格式无效。
〖1213〗-指定的服务名格式无效。
〖1214〗-指定的网络名格式无效。
〖1215〗-指定的共享名格式无效。
〖1216〗-指定的密码格式无效。
〖1217〗-指定的消息名格式无效。
〖1218〗-指定的消息目标格式无效。
〖1219〗-提供的凭据与已存在的凭据集冲突。
〖1220〗-企图创建网络服务器的会话,但已对该服务器创建过多的会话。
〖1221〗-工作组或域名已由网络上的另一部计算机使用。
〖1222〗-网络未连接或启动。
〖1223〗-操作已被用户取消。
〖1224〗-请求的操作无法在使用用户映射区域打开的文件上执行。
〖1225〗-远程系统拒绝网络连接。
〖1226〗-网络连接已被适当地关闭了。
〖1227〗-网络传输终结点已有与其关联的地址。
〖1228〗-地址仍未与网络终结点关联。
〖1229〗-企图在不存在的网络连接上进行操作。
〖1230〗-企图在使用中的网络连接上进行无效的操作。
〖1231〗-不能访问网络位置。有关网络排除故障的信息,请参阅 Windows 帮助。
〖1232〗-不能访问网络位置。有关网络排除故障的信息,请参阅 Windows 帮助。
〖1233〗-不能访问网络位置。有关网络排除故障的信息,请参阅 Windows 帮助。
〖1234〗-没有任何服务正在远程系统上的目标网络终结点上操作。
〖1235〗-请求被终止。
〖1236〗-由本地系统终止网络连接。
〖1237〗-操作无法完成。应该重试。
〖1238〗-因为已达到此帐户的最大同时连接数限制,所以无法连接服务器。
〖1239〗-试图在这个帐户未被授权的时间内登录。
〖1240〗-此帐户并未得到从这个工作站登录的授权。
〖1241〗-请求的操作不能使用这个网络地址。
〖1242〗-服务器已经注册。
〖1243〗-指定的服务不存在。
〖1244〗-因为用户还未被验证,不能执行所要求的操作。
〖1245〗-因为用户还未登录网络,不能执行所要求的操作。指定的服务不存在。
〖1246〗-正在继续工作。
〖1247〗-试图进行初始操作,但是初始化已完成。
〖1248〗-没有更多的本地设备。
〖1249〗-指定的站点不存在。
〖1250〗-具有指定名称的域控制器已经存在。
〖1251〗-只有连接到服务器上时,该操作才受支持。
〖1252〗-即使没有改动,组策略框架也应该调用扩展。
〖1253〗-指定的用户没有一个有效的配置文件。
〖1254〗-Microsoft Small Business Server 不支持此操作。
〖1300〗-并非所有被引用的特权都指派给呼叫方。
〖1301〗-帐户名和安全标识间的某些映射未完成。
〖1302〗-没有为该帐户特别设置系统配额限制。
〖1303〗-没有可用的加密密钥。返回了一个已知加密密钥。
〖1304〗-密码太复杂,无法转换成 LAN Manager 密码。返回的 LAN Manager 密码为空字符串。
〖1305〗-修订级别未知。
〖1306〗-表明两个修订级别是不兼容的。
〖1307〗-这个安全标识不能指派为此对象的所有者。
〖1308〗-这个安全标识不能指派为对象的主要组。
〖1309〗-当前并未模拟客户的线程试图操作模拟令牌。
〖1310〗-组可能未被禁用。
〖1311〗-当前没有可用的登录服务器来服务登录请求。
〖1312〗-指定的登录会话不存在。可能已被终止。
〖1313〗-指定的特权不存在。
〖1314〗-客户没有所需的特权。
〖1315〗-提供的名称并非正确的帐户名形式。
〖1316〗-指定的用户已存在。
〖1317〗-指定的用户不存在。
〖1318〗-指定的组已存在。
〖1319〗-指定的组不存在。
〖1320〗-指定的用户帐户已是指定组的成员,或是因为组包含成员所以无法删除指定的组。
〖1321〗-指定的用户帐户不是指定组帐户的成员。
〖1322〗-无法禁用或删除最后剩余的系统管理帐户。
〖1323〗-无法更新密码。提供作为当前密码的值不正确。
〖1324〗-无法更新密码。提供给新密码的值包含密码中不允许的值。
〖1325〗-无法更新密码。为新密码提供的值不符合字符域的长度、复杂性或历史要求。
〖1326〗-登录失败: 未知的用户名或错误密码。
〖1327〗-登录失败: 用户帐户限制。
〖1328〗-登录失败: 违反帐户登录时间限制。
〖1329〗-登录失败: 不允许用户登录到此计算机。
〖1330〗-登录失败: 指定的帐户密码已过期。
〖1331〗-登录失败: 禁用当前的帐户。
〖1332〗-帐户名与安全标识间无任何映射完成。
〖1333〗-一次请求过多的本地用户标识符(LUIDs)。
〖1334〗-无更多可用的本地用户标识符(LUIDs)。
〖1335〗-对于该特别用法,安全 ID 的次级授权部分无效。
〖1336〗-访问控制列表(ACL)结构无效。
〖1337〗-安全 ID 结构无效。
〖1338〗-安全描述符结构无效。
〖1340〗-无法创建固有的访问控制列表(ACL)或访问控制项目(ACE)。
〖1341〗-服务器当前已禁用。
〖1342〗-服务器当前已启用。
〖1343〗-提供给识别代号颁发机构的值为无效值。
〖1344〗-无更多可用的内存以更新安全信息。
〖1345〗-指定属性无效,或与整个群体的属性不兼容。
〖1346〗-指定的模拟级别无效, 或所提供的模拟级别无效。
〖1347〗-无法打开匿名级安全令牌。
〖1348〗-请求的验证信息类别无效。
〖1349〗-令牌的类型对其尝试使用的方法不适当。
〖1350〗-无法在与安全性无关联的对象上运行安全性操作。
〖1351〗-未能从域控制器读取配置信息,或者是因为机器不可使用,或者是访问被拒绝。
〖1352〗-安全帐户管理器(SAM)或本地安全颁发机构(LSA)服务器处于运行安全操作的错误状态。
〖1353〗-域处于运行安全操作的错误状态。
〖1354〗-此操作只对域的主要域控制器可行。
〖1355〗-指定的域不存在,或无法联系。
〖1356〗-指定的域已存在。
〖1357〗-试图超出每服务器域个数的限制。
〖1358〗-无法完成请求操作,因为磁盘上的严重介质失败或数据结构损坏。
〖1359〗-出现了内部错误。
〖1360〗-通用访问类型包含于已映射到非通用类型的访问掩码中。
〖1361〗-安全描述符格式不正确 (绝对或自相关的)。
〖1362〗-请求操作只限制在登录进程中使用。调用进程未注册为一个登录进程。
〖1363〗-无法使用已在使用中的标识启动新的会话。
〖1364〗-未知的指定验证数据包。
〖1365〗-登录会话并非处于与请求操作一致的状态中。
〖1366〗-登录会话标识已在使用中。
〖1367〗-登录请求包含无效的登录类型值。
〖1368〗-在使用命名管道读取数据之前,无法经由该管道模拟。
〖1369〗-注册表子树的事务处理状态与请求状态不一致。
〖1370〗-安全性数据库内部出现损坏。
〖1371〗-无法在内置帐户上运行此操作。
〖1372〗-无法在内置特殊组上运行此操作。
〖1373〗-无法在内置特殊用户上运行此操作。
〖1374〗-无法从组中删除用户,因为当前组为用户的主要组。
〖1375〗-令牌已作为主要令牌使用。
〖1376〗-指定的本地组不存在。
〖1377〗-指定的帐户名不是本地组的成员。
〖1378〗-指定的帐户名已是本地组的成员。
〖1379〗-指定的本地组已存在。
〖1380〗-登录失败: 未授予用户在此计算机上的请求登录类型。
〖1381〗-已超过在单一系统中可保存机密的最大个数。
〖1382〗-机密的长度超过允许的最大长度。
〖1383〗-本地安全颁发机构数据库内部包含不一致性。
〖1384〗-在尝试登录的过程中,用户的安全上下文积累了过多的安全标识。
〖1385〗-登录失败: 未授予用户在此计算机上的请求登录类型。
〖1386〗-更改用户密码时需要交叉加密密码。
〖1387〗-由于成员不存在,无法将成员添加到本地组中,也无法从本地组将其删除。
〖1388〗-无法将新成员加入到本地组中,因为成员的帐户类型错误。
〖1389〗-已指定过多的安全标识。
〖1390〗-更改此用户密码时需要交叉加密密码。
〖1391〗-表明 ACL 未包含任何可承继的组件。
〖1392〗-文件或目录损坏且无法读取。
〖1393〗-磁盘结构损坏且无法读取。
〖1394〗-无任何指定登录会话的用户会话项。
〖1395〗-正在访问的服务有连接数目标授权限制。这时候已经无法再连接,原因是已经到达可接受的连接数目上限。
〖1396〗-登录失败: 该目标帐户名称不正确。
〖1397〗-相互身份验证失败。该服务器在域控制器的密码过期。
〖1398〗-在客户机和服务器之间有一个时间差。
〖1400〗-无效的窗口句柄。
〖1401〗-无效的菜单句柄。
〖1402〗-无效的光标句柄。
〖1403〗-无效的加速器表句柄。
〖1404〗-无效的挂钩句柄。
〖1405〗-无效的多重窗口位置结构句柄。
〖1406〗-无法创建最上层子窗口。
〖1407〗-找不到窗口类别。
〖1408〗-无效窗口;它属于另一线程。
〖1409〗-热键已注册。
〖1410〗-类别已存在。
〖1411〗-类别不存在。
〖1412〗-类别仍有打开的窗口。
〖1413〗-无效索引。
〖1414〗-无效的图标句柄。
〖1415〗-使用专用 DIALOG 窗口字。
〖1416〗-找不到列表框标识。
〖1417〗-找不到通配字符。
〖1418〗-线程没有打开的剪贴板。
〖1419〗-没有注册热键。
〖1420〗-窗口不是合法的对话窗口。
〖1421〗-找不到控件 ID。
〖1422〗-因为没有编辑控制,所以组合框的消息无效。
〖1423〗-窗口不是组合框。
〖1424〗-高度必须小于 256。
〖1425〗-无效的设备上下文(DC)句柄。
〖1426〗-无效的挂接程序类型。
〖1427〗-无效的挂接程序。
〖1428〗-没有模块句柄无法设置非本机的挂接。
〖1429〗-此挂接程序只可整体设置。
〖1430〗-Journal Hook 程序已安装。
〖1431〗-挂接程序尚未安装。
〖1432〗-单一选择列表框的无效消息。
〖1433〗-LB_SETCOUNT 发送到非被动的列表框。
〖1434〗-此列表框不支持 Tab 键宽度。
〖1435〗-无法毁坏由另一个线程创建的对象。
〖1436〗-子窗口没有菜单。
〖1437〗-窗口没有系统菜单。
〖1438〗-无效的消息对话框样式。
〖1439〗-无效的系统范围内的 (SPI_*) 参数。
〖1440〗-已锁定屏幕。
〖1441〗-多重窗口位置结构中窗口的所有句柄必须具有相同的上层。
〖1442〗-窗口不是子窗口。
〖1443〗-无效的 GW_* 命令。
〖1444〗-无效的线程标识。
〖1445〗-无法处理非多重文档界面 (MDI) 窗口中的消息。
〖1446〗-弹出式菜单已经激活。
〖1447〗-窗口没有滚动条。
〖1448〗-滚动条范围不可大于 MAXLONG。
〖1449〗-无法以指定的方式显示或删除窗口。
〖1450〗-系统资源不足,无法完成请求的服务。
〖1451〗-系统资源不足,无法完成请求的服务。
〖1452〗-系统资源不足,无法完成请求的服务。
〖1453〗-配额不足,无法完成请求的服务。
〖1454〗-配额不足,无法完成请求的服务。
〖1455〗-页面文件太小,无法完成操作。
〖1456〗-找不到菜单项。
〖1457〗-键盘布局句柄无效。
〖1458〗-不允许使用挂钩类型。
〖1459〗-该操作需要交互式窗口工作站。
〖1460〗-由于超时时间已过,该操作返回。
〖1461〗-无效监视器句柄。
〖1500〗-事件日志文件损坏。
〖1501〗-无法打开事件日志文件,事件日志服务没有启动。
〖1502〗-事件日志文件已满。
〖1503〗-事件日志文件已在读取间更改。
〖1601〗-无法访问 Windows 安装服务。请与技术支持人员联系,确认 Windows 安装服务是否注册正确。
〖1602〗-用户取消了安装。
〖1603〗-安装时发生严重错误
〖1604〗-安装已挂起,未完成。
〖1605〗-这个操作只对当前安装的产品有效。
〖1606〗-功能 ID 未注册。
〖1607〗-组件 ID 并未注册。
〖1608〗-未知属性。
〖1609〗-句柄处于不正确的状态。
〖1610〗-这个产品的配置数据已损坏。请与技术支持人员联系。
〖1611〗-组件限制语不存在。
〖1612〗-这个产品的安装来源无法使用。请验证来源是否存在,是否可以访问。
〖1613〗-Windows 安装服务无法安装这个安装程序包。您必须安装含有 Windows 安装服务新版本的 Windows Service Park。
〖1614〗-没有卸载产品。
〖1615〗-SQL 查询语法不正确或不被支持。
〖1616〗-记录字符域不存在。
〖1617〗-设备已被删除.
〖1618〗-正在进行另一个安装操作。请在继续这个安装操作之前完成那个操作。
〖1619〗-未能打开这个安装程序包。请验证程序包是否存在,是否可以访问;或者与应用程序供应商联系,验证这是否是有效的 Windows 安装服务程序包。
〖1620〗-未能打开这个安装程序包。请与应用程序供应商联系,验证这是否是有效的 Windows 安装服务程序包。
〖1621〗-启动 Windows 安装服务用户界面时有错误。请与技术支持人员联系。
〖1622〗-打开安装日志文件的错误。请验证指定的日志文件位置是否存在,是否可以写入。
〖1623〗-安装程序包的语言不受系统支持。
〖1624〗-应用变换时的错误。请验证指定的变换路径是否有效。
〖1625〗-系统策略禁止这个安装。请与系统管理员联系。
〖1626〗-无法执行函数。
〖1627〗-执行期间,函数出了问题。
〖1628〗-指定了无效的或未知的表格。
〖1629〗-提供的数据类型不对。
〖1630〗-这个类型的数据不受支持。
〖1631〗-Windows 安装服务未能启动。请与技术支持人员联系。
〖1632〗-临时文件夹已满或无法使用。请验证临时文件夹是否存在,是否可以写入。
〖1633〗-这个处理器类型不支持该安装程序包。请与产品供应商联系。
〖1634〗-组件没有在这台计算机上使用。
〖1635〗-无法打开修补程序包。请验证修补程序包是否存在,是否可以访问;或者与应用程序供应商联系,验证这是否是 Windows 安装服务的修补程序包。
〖1636〗-无法打开修补程序包。请与应用程序供应商联系,验证这是否是 Windows 安装服务的修补程序包。
〖1637〗-Windows 安装服务无法处理这个插入程序包。您必须安装含有 Windows 安装服务新版本的 Windows Service Pack。
〖1638〗-已安装这个产品的另一个版本。这个版本的安装无法继续。要配置或删除这个产品的现有版本,请用“控制面板”上的“添加/删除程序”。
〖1639〗-无效的命令行参数。有关详细的命令行帮助,请查阅 Windows 安装服务的 SDK。
〖1640〗-在终端服务远程会话期间,只有管理员有添加、删除或配置服务器软件的权限。如果您要在服务器上安装或配置软件,请与网络管理员联系。
〖1641〗-要求的操作已成功结束。要使改动生效,必须重新启动系统。
〖1642〗-Windows 安装服务无法安装升级修补程序,因为被升级的程序可能会丢失或是升级修补程序可能更新此程序的一个不同版本。请确认要被升级的程序在您的计算机上且您的升级修补程序是正确的。
〖1700〗-串绑定无效。
〖1701〗-绑定句柄类型不正确。
〖1702〗-绑定句柄无效。
〖1703〗-不支持 RPC 协议序列。
〖1704〗-RPC 协议序列无效。
〖1705〗-字符串通用唯一标识 (UUID) 无效。
〖1706〗-终结点格式无效。
〖1707〗-网络地址无效。
〖1708〗-找不到终结点。
〖1709〗-超时值无效。
〖1710〗-找不到对象通用唯一标识(UUID)。
〖1711〗-对象通用唯一标识 (UUID)已注册。
〖1712〗-类型通用唯一标识(UUID)已注册。
〖1713〗-RPC 服务器已在侦听。
〖1714〗-未登记任何协议序列。
〖1715〗-RPC 服务器未在侦听。
〖1716〗-未知的管理器类型。
〖1717〗-未知的界面。
〖1718〗-没有任何链接。
〖1719〗-无任何协议顺序。
〖1720〗-无法创建终结点。
〖1721〗-资源不足,无法完成此操作。
〖1722〗-RPC 服务器不可用。
〖1723〗-RPC 服务器过忙以致无法完成此操作。
〖1724〗-网络选项无效。
〖1725〗-在此线程中,没有使用中的远程过程调用。
〖1726〗-远程过程调用失败。
〖1727〗-远程过程调用失败且未运行。
〖1728〗-远程过程调用(RPC)协议出错。
〖1730〗-RPC 服务器不支持传送语法。
〖1732〗-不支持通用唯一标识(UUID)类型。
〖1733〗-标记无效。
〖1734〗-数组边界无效。
〖1735〗-链接不包含项目名称。
〖1736〗-名称语法无效。
〖1737〗-不支持名称语法。
〖1739〗-没有可用来创建通用唯一标识 (UUID)的网络地址。
〖1740〗-终结点是一份备份。
〖1741〗-未知的验证类型。
〖1742〗-调用的最大个数太小。
〖1743〗-字符串太长。
〖1744〗-找不到 RPC 协议顺序。
〖1745〗-过程号超出范围。
〖1746〗-绑定不包含任何验证信息。
〖1747〗-未知的验证服务。
〖1748〗-未知的验证级别。
〖1749〗-安全上下文无效。
〖1750〗-未知的授权服务。
〖1751〗-项目无效。
〖1752〗-服务器终结点无法运行操作。
〖1753〗-终结点映射表中无更多的可用终结点。
〖1754〗-未导出任何界面。
〖1755〗-项目名称不完整。
〖1756〗-版本选项无效。
〖1757〗-没有其他成员。
〖1758〗-没有内容未导出。
〖1759〗-接口没有找到。
〖1760〗-项目已存在。
〖1761〗-找不到项目。
〖1762〗-无可用的名称服务。
〖1763〗-网络地址族无效。
〖1764〗-不支持请求的操作。
〖1765〗-无可用的安全上下文以允许模拟。
〖1766〗-远程过程调用(RPC)中发生内部错误。
〖1767〗-RPC 服务器试图以零除整数。
〖1768〗-RPC 服务器中发生地址错误。
〖1769〗-RPC 服务器上的浮点操作导至以零做除数。
〖1770〗-RPC 服务器上发生浮点下溢。
〖1771〗-RPC 服务器上发生浮点上溢。
〖1772〗-自动句柄绑定的可用 RPC 服务器列表已用完。
〖1773〗-无法打开字符翻译表文件。
〖1774〗-包含字符翻译表的文件少于512 字节。
〖1775〗-在远程过程调用时,将空的上下文句柄从客户传递到主机。
〖1777〗-在远程过程调用时,上下文句柄已更改。
〖1778〗-传递到远程过程调用的绑定句柄不相符。
〖1779〗-承接体无法获得远程过程调用句柄。
〖1780〗-传递空引用指针到承接体。
〖1781〗-列举值超出范围。
〖1782〗-字节计数太小。
〖1783〗-承接体接收到坏数据。
〖1784〗-提供给请求操作的用户缓冲区无效。
〖1785〗-磁盘媒体无法识别。可能未被格式化。
〖1786〗-工作站没有信任机密。
〖1787〗-服务器上的安全数据库没有此工作站信任关系的计算机帐户。
〖1788〗-主域和受信域间的信任关系失败。
〖1789〗-此工作站和主域间的信任关系失败。
〖1790〗-网络登录失败。
〖1791〗-此线程的远程过程调用已在进行中。
〖1792〗-试图登录,但是网络登录服务没有启动。
〖1793〗-用户帐户到期。
〖1794〗-转发程序已被占用且无法卸载。
〖1795〗-指定的打印机驱动程序已安装。
〖1796〗-指定的端口未知。
〖1797〗-未知的打印机驱动程序。
〖1798〗-未知的打印机处理器。
〖1799〗-指定的分隔页文件无效。
〖1800〗-指定的优先级无效。
〖1801〗-打印机名无效。
〖1802〗-打印机已存在。
〖1803〗-打印机命令无效。
〖1804〗-指定的数据类型无效。
〖1805〗-指定的环境无效。
〖1806〗-没有更多的绑定。
〖1807〗-所用帐户为域间信任帐户。请使用您的全局用户帐户或本地用户帐户来访问这台服务器。
〖1808〗-所用帐户是一个计算机帐户。使用您的全局用户帐户或本地用户帐户来访问此服务器。
〖1809〗-已使用的帐户为服务器信任帐户。使用您的全局用户帐户或本地用户帐户来访问此服务器。
〖1810〗-指定域的名称或安全标识(SID)与该域的信任信息不一致。
〖1811〗-服务器在使用中且无法卸载。
〖1812〗-指定的映像文件不包含资源区域。
〖1813〗-找不到映像文件中指定的资源类型。
〖1814〗-找不到映像文件中指定的资源名。
〖1815〗-找不到映像文件中指定的资源语言标识。
〖1816〗-配额不足,无法处理此命令。
〖1817〗-未登记任何界面。
〖1818〗-远程过程调用被取消。
〖1819〗-绑定句柄不包含所有需要的信息。
〖1820〗-在远程过程调用过程中通讯失败。
〖1821〗-不支持请求的验证级别。
〖1822〗-未登记任何主名称。
〖1823〗-指定的错误不是有效的 Windows RPC 错误码。
〖1824〗-已配置一个只在这部计算机上有效的 UUID。
〖1825〗-发生一个安全包特有的错误。
〖1826〗-线程未取消。
〖1827〗-无效的编码/解码句柄操作。
〖1828〗-序列化包装的版本不兼容。
〖1829〗-RPC 承接体的版本不兼容。
〖1830〗-RPC 管道对象无效或已损坏。
〖1831〗-试图在 RPC 管道物件上进行无效操作。
〖1832〗-不被支持的 RPC 管道版本。
〖1898〗-找不到该组成员。
〖1899〗-无法创建终结点映射表数据库项。
〖1900〗-对象通用唯一标识 (UUID) 为 nil UUID。
〖1901〗-指定的时间无效。
〖1902〗-指定的格式名称无效。
〖1903〗-指定的格式大小无效。
〖1904〗-指定的打印机句柄正等候在
〖1905〗-已删除指定的打印机。
〖1906〗-打印机的状态无效。
〖1907〗-在第一次登录之前,必须更改用户密码。
〖1908〗-找不到此域的域控制器。
〖1909〗-引用的帐户当前已锁定,且可能无法登录。
〖1910〗-没有发现指定的此对象导出者
〖1911〗-没有发现指定的对象。
〖1912〗-没有发现指定的对象解析器。
〖1913〗-一些待发数据仍停留在请求缓冲区内。
〖1914〗-无效的异步远程过程调用句柄。
〖1915〗-这个操作的异步 RPC 调用句柄不正确。
〖1916〗-RPC 管道对象已经关闭。
〖1917〗-在 RPC 调用完成之前全部的管道都已处理完成。
〖1918〗-没有其他可用的数据来自 RPC 管道。
〖1919〗-这个机器没有可用的站点名。
〖1920〗-系统无法访问此文件。
〖1921〗-系统无法辨识文件名。
〖1922〗-项目不是所要的类型。
〖1923〗-无法将所有对象的 UUID 导出到指定的项。
〖1924〗-无法将界面导出到指定的项。
〖1925〗-无法添加指定的配置文件项。
〖1926〗-无法添加指定的配置文件元素。
〖1927〗-无法删除指定的配置文件元素。
〖1928〗-无法添加组元素。
〖1929〗-无法删除组元素。
〖2000〗-无效的像素格式。
〖2001〗-指定的驱动程序无效。
〖2002〗-窗口样式或类别属性对此操作无效。
〖2003〗-不支持请求的图元操作。
〖2004〗-不支持请求的变换操作。
〖2005〗-不支持请求的剪切操作。
〖2010〗-指定的颜色管理模块无效。
〖2011〗-制定的颜色文件配置无效。
〖2012〗-找不到指定的标识。
〖2013〗-找不到所需的标识。
〖2014〗-指定的标识已经存在。
〖2015〗-指定的颜色文件配置与任何设备都不相关。
〖2016〗-找不到该指定的颜色文件配置
〖2017〗-指定的颜色空间无效。
〖2018〗-图像颜色管理没有启动。
〖2019〗-在删除该颜色传输时有一个错误。
〖2020〗-该指定的颜色传输无效。
〖2021〗-该指定的变换与位图的颜色空间不匹配。
〖2022〗-该指定的命名颜色索引在配置文件中不存在。
〖2102〗-没有安装工作站驱动程序。
〖2103〗-无法定位服务器。
〖2104〗-发生内部错误,网络无法访问共享内存段。
〖2105〗-网络资源不足。
〖2106〗-工作站不支持这项操作。
〖2107〗-设备没有连接。
〖2108〗-网络连接已成功,但需要提示用户输入一个不同于原始指定的密码。
〖2114〗-没有启动服务器服务。
〖2115〗-队列空。
〖2116〗-设备或目录不存在。
〖2117〗-无法在重定向的资源上执行这项操作。
〖2118〗-名称已经共享。
〖2119〗-服务器当前无法提供所需的资源。
〖2121〗-额外要求的项目超过允许的上限。
〖2122〗-对等服务只支持两个同时操作的用户 。
〖2123〗-API 返回缓冲区太小。
〖2127〗-远程 API 错误。
〖2131〗-打开或读取配置文件时出错。
〖2136〗-发生一般网络错误。
〖2137〗-工作站服务的状态不一致。重新启动工作站服务之前,请先重新启动计算机。
〖2138〗-工作站服务没有启动。
〖2139〗-所需信息不可用。
〖2140〗-发生 Windows 2000 内部错误。
〖2141〗-服务器没有设置事务处理。
〖2142〗-远程服务器不支持请求的 API。
〖2143〗-事件名无效。
〖2144〗-网络上已经有此计算机名。请更名后重新启动。
〖2146〗-配置信息中找不到指定的组件。
〖2147〗-配置信息中找不到指定的参数。
〖2149〗-配置文件中有一个命令行太长。
〖2150〗-打印机不存在。
〖2151〗-打印作业不存在。
〖2152〗-打印机目标找不到。
〖2153〗-打印机目标已经存在。
〖2154〗-打印机队列已经存在。
〖2155〗-无法添加其它的打印机。
〖2156〗-无法添加其它的打印作业。
〖2157〗-无法添加其它的打印机目标。
〖2158〗-此打印机目标处于空闲中,不接受控制操作。
〖2159〗-此“打印机目标请求”包含无效的控制函数。
〖2160〗-打印处理程序没有响应。
〖2161〗-后台处理程序没有运行。
〖2162〗-打印目标当前的状况,无法执行这项操作。
〖2163〗-打印机队列当前的状况,无法执行这项操作。
〖2164〗-打印作业当前的状况,无法执行这项操作。
〖2165〗-无法为后台处理程序分配内存。
〖2166〗-设备驱动程序不存在。
〖2167〗-打印处理程序不支持这种数据类型。
〖2168〗-没有安装打印处理程序。
〖2180〗-锁定服务数据库。
〖2181〗-服务表已满。
〖2182〗-请求的服务已经启动。
〖2183〗-这项服务没有响应控制操作。
〖2184〗-服务仍未启动。
〖2185〗-服务名无效。
〖2186〗-服务没有响应控制功能。
〖2187〗-服务控制处于忙碌状态。
〖2188〗-配置文件包含无效的服务程序名。
〖2189〗-在当前的状况下无法控制服务。
〖2190〗-服务异常终止。
〖2191〗-这项服务无法接受请求的 "暂停" 或 "停止" 操作。
〖2192〗-服务控制“计划程序”在“计划表”中找不到服务名。
〖2193〗-无法读取服务控制计划程序管道。
〖2194〗-无法创建新服务的线程。
〖2200〗-此工作站已经登录到局域网。
〖2201〗-工作站没有登录到局域网。
〖2202〗-指定的用户名无效。
〖2203〗-密码参数无效。
〖2204〗-登录处理器没有添加消息别名。
〖2205〗-登录处理器没有添加消息别名。
〖2206〗-注销处理器没有删除消息别名。
〖2207〗-注销处理器没有删除消息别名。
〖2209〗-暂停网络登录。
〖2210〗-中心登录服务器发生冲突。
〖2211〗-服务器没有设置正确的用户路径。
〖2212〗-加载或运行登录脚本时出错。
〖2214〗-没有指定登录服务器,计算机的登录状态是单机操作。
〖2215〗-登录服务器找不到。
〖2216〗-此计算机已经有一个登录域。
〖2217〗-登录服务器无法验证登录。
〖2219〗-安全数据库找不到。
〖2220〗-组名找不到。
〖2221〗-用户名找不到。
〖2222〗-资源名找不到。
〖2223〗-组已经存在。
〖2224〗-帐户已经存在。
〖2225〗-资源使用权限清单已经存在。
〖2226〗-此操作只能在该域的主域控制器上执行。
〖2227〗-安全数据库没有启动。
〖2228〗-用户帐户数据库中的名称太多。
〖2229〗-磁盘 I/O 失败。
〖2230〗-已经超过每个资源 64 个项目的限制。
〖2231〗-不得删除带会话的用户。
〖2232〗-上层目录找不到。
〖2233〗-无法添加到安全数据库会话高速缓存段。
〖2234〗-这项操作不能在此特殊的组上执行。
〖2235〗-用户帐户数据库会话高速缓存没有记录此用户。
〖2236〗-用户已经属于此组。
〖2237〗-用户不属于此组。
〖2238〗-此用户帐户尚未定义。
〖2239〗-此用户帐户已过期。
〖2240〗-此用户不得从此工作站登录网络。
〖2241〗-这时候不允许用户登录网络。
〖2242〗-此用户的密码已经过期。
〖2243〗-此用户的密码无法更改。
〖2244〗-现在无法使用此密码。
〖2245〗-密码不满足密码策略的需要。检查最小密码长度、密码复杂性和密码历史的需求。
〖2246〗-此用户的密码最近才启用,现在不能更改。
〖2247〗-安全数据库已损坏。
〖2248〗-不需要更新此副本复制的网络/本地安全数据库。
〖2249〗-此副本复制的数据库已过时;请同步处理其中的数据。
〖2250〗-此网络连接不存在。
〖2251〗-此 asg_type 无效。
〖2252〗-此设备当前正在共享中。
〖2270〗-计算机名无法作为消息别名添加。网络上可能已经有此名称。
〖2271〗-信使服务已经启动。
〖2272〗-信使服务启动失败。
〖2273〗-网络上找不到此消息别名。
〖2274〗-此消息别名已经转发出去。
〖2275〗-已经添加了此消息别名,但是仍被转发。
〖2276〗-此消息别名已在本地存在。
〖2277〗-添加的消息别名已经超过数目上限。
〖2278〗-无法删除计算机名。
〖2279〗-消息无法转发回到同一个工作站。
〖2280〗-域消息处理器出错。
〖2281〗-消息已经发送出去,但是收件者已经暂停信使服务。
〖2282〗-消息已经发送出去,但尚未收到。
〖2283〗-消息别名当前正在使用中。请稍候片刻再试。
〖2284〗-信使服务尚未启动。
〖2285〗-该名称不在本地计算机上。
〖2286〗-网络上找不到转发的消息别名。
〖2287〗-远程通讯站的消息别名表已经满了。
〖2288〗-此别名的消息当前没有在转发中。
〖2289〗-广播的消息被截断。
〖2294〗-设备名无效。
〖2295〗-写入出错。
〖2297〗-网络上的消息别名重复。
〖2298〗-此消息别名会在稍后删除。
〖2299〗-没有从所有的网络删除消息别名。
〖2300〗-这项操作无法在使用多种网络的计算机上执行。
〖2310〗-此共享的资源不存在。
〖2311〗-设备没有共享。
〖2312〗-带此计算机名的会话不存在。
〖2314〗-没有用此识别号打开的文件。
〖2315〗-执行远程管理命令失败。
〖2316〗-打开远程临时文件失败。
〖2317〗-从远程管理命令返回的数据已经被截断成 64K。
〖2318〗-此设备无法同时共享为后台处理资源和非后台处理资源。
〖2319〗-服务器清单中的信息可能不正确
〖2320〗-计算机在此域未处于活动状态
〖2321〗-在删除共享之前,需要将该共享从分布式文件系统中删除。
〖2331〗-无法在此设备执行这项操作
〖2332〗-此设备无法共享。
〖2333〗-此设备未打开。
〖2334〗-此设备名清单无效。
〖2335〗-队列优先级无效。
〖2337〗-没有任何共享的通讯设备。
〖2338〗-指定的队列不存在。
〖2340〗-此设备清单无效。
〖2341〗-请求的设备无效。
〖2342〗-后台处理程序正在使用此设备。
〖2343〗-此设备已经被当成通讯设备来使用。
〖2351〗-此计算机名无效。
〖2354〗-指定的字符串及前缀太长。
〖2356〗-此路径组成部分无效。
〖2357〗-无法判断输入类型。
〖2362〗-类型缓冲区不够大。
〖2370〗-配置文件不得超过 64K。
〖2371〗-初始偏移量越界。
〖2372〗-系统无法删除当前到网络资源的连接。
〖2373〗-系统无法分析此文件中的命令行。
〖2374〗-加载配置文件时出错。\
〖2375〗-保存配置文件时出错,只部份地保存了配置文件。
〖2378〗-此日志文件在前后两次读取之间已经发生变化。
〖2380〗-资源路径不可以是目录。
〖2381〗-资源路径无效。
〖2382〗-目标路径无效。
〖2383〗-源路径及目标路径分属不同的服务器。
〖2385〗-请求的 Run 服务器现在暂停。
〖2389〗-与 Run 服务器通讯时出错。
〖2391〗-启动后台处理时出错。
〖2392〗-找不到您连接的共享资源。
〖2400〗-LAN 适配器号码无效。
〖2401〗-此网络连接有文件打开或请求挂起。
〖2402〗-使用中的连接仍存在。
〖2403〗-此共享名或密码无效。
〖2404〗-设备正由活动进程使用,无法断开。
〖2405〗-此驱动器号已在本地使用。
〖2430〗-指定的客户已经在指定的事件注册。
〖2431〗-警报表已满。
〖2432〗-发出的警报名称无效或不存在。
〖2433〗-警报接收者无效。
〖2434〗-用户的登录时间长短不再合法。所以已经删除用户与该服务器的会话。
〖2440〗-日志文件中没有请求的记录号。
〖2450〗-用户帐户数据库没有正确配置。
〖2451〗-当 Netlogon 服务正在运行时,不允许执行这项操作。
〖2452〗-这项操作无法在最后的管理帐户上执行。
〖2453〗-找不到此域的域控制器。
〖2454〗-无法设置此用户的登录信息。
〖2455〗-Netlogon 服务尚未启动。
〖2456〗-无法添加到用户帐户数据库。
〖2457〗-此服务器的时钟与主域控制器的时钟不一致。
〖2458〗-检测到密码不匹配。
〖2460〗-服务器识别码没有指定有效的服务器。
〖2461〗-会话标识没有指定有效的会话。
〖2462〗-连接识别码没有指定有效的连接。
〖2463〗-可用服务器表中无法再加上其它项。
〖2464〗-服务器已经到了支持的会话数目上限。
〖2465〗-服务器已经到了支持的连接数目上限。
〖2466〗-服务器打开的文件到了上限,无法打开更多文件。
〖2467〗-这台服务器没有登记替换的服务器。
〖2470〗-请用低级的 API (远程管理协议)。
〖2480〗-UPS 服务无法访问 UPS 驱动程序。
〖2481〗-UPS 服务设置错误。
〖2482〗-UPS 服务无法访问指定通讯端口 (Comm Port)。
〖2483〗-UPS 显示线路中断或电池不足,服务没有启动。
〖2484〗-UPS 服务无法执行系统关机的操作。
〖2500〗-下面的程序返回一个 MS-DOS 错误码:
〖2501〗-下面的程序需要更多的内存:
〖2502〗-下面程序调用了不支持的 MS-DOS 函数:
〖2503〗-工作站无法启动。
〖2504〗-下面的文件已损坏。
〖2505〗-启动块定义文件中没有指定引导程序。
〖2506〗-NetBIOS 返回错误: NCB 及 SMB 数据转储。
〖2507〗-磁盘 I/O 错误。
〖2508〗-无法替换映像参数。
〖2509〗-跨越磁盘扇区范围的映像参数太多。
〖2510〗-不是从用 /S 格式化的 MS-DOS软盘产生的映像。
〖2511〗-稍后会从远程重新启动。
〖2512〗-无法调用远程启动服务器。
〖2513〗-无法连接到远程启动服务器。
〖2514〗-无法打开远程启动服务器上的映像文件。
〖2515〗-正在连接到远程启动服务器...
〖2516〗-正在连接到远程启动服务器...
〖2517〗-远程启动服务已经停止,请检测错误记录文件,查明出错的原因。
〖2518〗-远程启动失败,请检查错误日志文件,查明出错的原因。
〖2519〗-不允许第二个远程启动 (Remoteboot) 资源连接。
〖2550〗-浏览服务设置成 MaintainServerList=No。
〖2610〗-因为没有网卡与这项服务一起启动,所以无法启动服务。
〖2611〗-因为注册表中的启动信息不正确,所以无法启动服务。
〖2612〗-无法启动服务,原因是它的数据库找不到或损坏。
〖2613〗-因为找不到 RPLFILES 共享的资源,所以无法启动服务。
〖2614〗-因为找不到 RPLUSER 组,所以无法启动服务。
〖2615〗-无法枚举服务记录。
〖2616〗-工作站记录信息已损坏。
〖2617〗-工作站记录找不到。
〖2618〗-其它的工作站正在使用此工作站名。
〖2619〗-配置文件记录已损坏。
〖2620〗-配置文件记录找不到。
〖2621〗-其它的配置文件正在使用此名称。
〖2622〗-有很多工作站正在使用此配置文件。
〖2623〗-配置记录已损坏。
〖2624〗-配置记录找不到。
〖2625〗-适配器识别记录已损坏。
〖2626〗-内部服务出错。
〖2627〗-供应商识别记录已损坏。
〖2628〗-启动块记录已损坏。
〖2629〗-找不到此工作站的用户帐户记录。
〖2630〗-RPLUSER 本地组找不到。
〖2631〗-找不到启动块记录。
〖2632〗-所选的配置文件与此工作站不兼容。
〖2633〗-其它的工作站正在使用所选的网卡。
〖2634〗-有些配置文件正在使用此配置。
〖2635〗-有数个工作站、配置文件或配置正在使用此启动块。
〖2636〗-服务无法制作远程启动数据库的备份。
〖2637〗-找不到适配器记录。
〖2638〗-找不到供应商记录。
〖2639〗-其它供应商记录正在使用此供应商名称。
〖2640〗-其它的启动区记录正在使用启动名称或供应商识别记录。
〖2641〗-其它的配置正在使用此配置名称。
〖2660〗-由 Dfs 服务所维护的内部数据库已损坏
〖2661〗-内部数据库中的一条记录已 损坏
〖2662〗-输入项路径与卷路径不匹配
〖2663〗-给定卷名已存在
〖2664〗-指定的服务器共享已在 Dfs 中共享
〖2665〗-所显示的服务器共享不支持所显示的 Dfs 卷
〖2666〗-此操作在非叶卷上无效。
〖2667〗-此操作在叶卷上无效。
〖2668〗-此操作不明确,因为该卷存在多服务器。
〖2669〗-无法创建连接点
〖2670〗-该服务器不是 Dfs 可识别的
〖2671〗-指定的重命名目标路径无效。
〖2672〗-指定 Dfs 卷脱线
〖2673〗-指定的服务器不为此卷服务
〖2674〗-检测到 Dfs 名中的环路
〖2675〗-在基于服务器的 Dfs 上不支持该操作
〖2676〗-这个卷已经受该指定服务器共享支持
〖2677〗-无法删除这个卷的上一个服务器共享支持
〖2678〗-Inter-Dfs 卷不支持该操作
〖2679〗-Dfs 服务的内部状态已经变得不一致
〖2680〗-Dfs 服务已经安装在指定的服务器上
〖2681〗-被协调的 Dfs 数据是一样的
〖2682〗-无法删除 Dfs 根目录卷 - 如需要请卸载 Dfs
〖2683〗-该共享的子目录或父目录已经存在在一个 Dfs 中
〖2690〗-Dfs 内部错误
〖2691〗-这台机器已经加入域 。
〖2692〗-这个机器目前未加入域。
〖2693〗-这台机器是域控制器,而且无法从域中退出。
〖2694〗-目标域控制器不支持在 OU 中创建的机器帐户。
〖2695〗-指定的工作组名无效
〖2696〗-指定的计算机名与域控制器上使用的默认语言不兼容。
〖2697〗-找不到指定的计算机帐户。
〖2999〗-这是 NERR 范围内的最后一个错误。
2008年8月18日 星期一
GUID
數據機
Class: Modem
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}
連接埠 (COM 和 LPT)
Class: Ports
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E978-E325-11CE-BFC1-08002BE10318}
通用序列匯流排控制器
Class: USB
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}
磁碟機
Class: DiskDrive
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}
------------------------------------------------------------------------------------------------------------
隨身碟
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{a5dcbf10-6530-11d2-901f-00c04fb951ed}
More Information:
http://msdn.microsoft.com/en-us/library/bb663138.aspx
Class: Modem
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}
連接埠 (COM 和 LPT)
Class: Ports
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E978-E325-11CE-BFC1-08002BE10318}
通用序列匯流排控制器
Class: USB
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}
磁碟機
Class: DiskDrive
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}
------------------------------------------------------------------------------------------------------------
隨身碟
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{a5dcbf10-6530-11d2-901f-00c04fb951ed}
More Information:
http://msdn.microsoft.com/en-us/library/bb663138.aspx
Device Interface Classes for 1394 and 61883 Devices
Device Interface Classes for Battery and ACPI devices
Device Interface Classes for Bluetooth Devices
Device Interface Classes for Display and Image Devices
Device Interface Classes for Interactive Input Devices
Device Interface Classes for Modem Devices
Device Interface Classes for Network Devices
Device Interface Classes for Serial and Parallel Port Devices
Device Interface Classes for Storage Devices
Device Interface Classes for Kernel Streaming Media Devices
Device Interface Classes for USB Devices
Device Interface Classes for Windows Portable Devices
Device Interface Classes for Windows SideShow Devices
2008年8月17日 星期日
SetupDiEnumDeviceXXX
SetupDiEnumDeviceInterfaces
BOOL SetupDiEnumDeviceInterfaces(
HDEVINFO DeviceInfoSet, //設備訊息集
PSP_DEVINFO_DATA DeviceInfoData, //額外的設備描述
const GUID* InterfaceClassGuid, //GUID
DWORD MemberIndex, //設備訊息集裡的設備序號
PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData // Output
);
Parameters
DeviceInfoSet
[in] Handle to a device information set containing the devices for which to return interface information. This handle is typically returned by the SetupDiGetClassDevs or SetupDiGetClassDevsEx function.
DeviceInfoData
[in] Pointer to an SP_DEVINFO_DATA structure that constrains the search for interfaces to those of just one device in the device information set. This parameter is optional.
InterfaceClassGuid
[in] Pointer to a GUID that specifies the device interface class for the requested interface.
MemberIndex
[in] Zero-based index to the list of interfaces in the device information set. You should first call this function with the MemberIndex parameter set to zero to obtain the first interface. Then, repeatedly increment MemberIndex and retrieve an interface until this function fails and GetLastError returns ERROR_NO_MORE_ITEMS.
If the DeviceInfoData parameter specifies a particular device, MemberIndex applies only to the interfaces exposed by that device.
DeviceInterfaceData
[out] Pointer to an SP_DEVICE_INTERFACE_DATA structure that receives information for the device interface. You must set the cbSize member to sizeof( SP_DEVICE_INTERFACE_DATA) before calling this function.
------------------------------------------------------------------------------------------------------------------------------------------------------------
SetupDiEnumDeviceInfo
BOOL SetupDiEnumDeviceInfo(
HDEVINFO DeviceInfoSet, //設備訊息集
DWORD MemberIndex, //設備訊息集裡的設備序號
PSP_DEVINFO_DATA DeviceInfoData // Output
);
Parameters
DeviceInfoSet
[in] Handle to the device information set containing the devices for which to return element information.
MemberIndex
[in] Zero-based index to the list of interfaces in the device information set. You should first call this function with the MemberIndex parameter set to zero to obtain the first interface. Then, repeatedly increment MemberIndex and retrieve an interface until this function fails and GetLastError returns ERROR_NO_MORE_ITEMS.
DeviceInfoData
[out] Pointer to an SP_DEVINFO_DATA structure that receives information about this element. You must set the cbSize member to sizeof( SP_DEVINFO_DATA) before calling this function.
------------------------------------------------------------------------------------------------------------------------------------------------------------
SetupDiEnumDeviceInterfaces 跟 SetupDiEnumDeviceInfo 的差別
SetupDiEnumDeviceInterfaces :已經知道Class GUID, 只列舉出這個GUID符合的設備
呼叫順序:
SetupDiGetClassDevs() //列舉出特定GUID的Information Set
[...]
SetupDiEnumDeviceInterfaces() //列舉符合該GUID的設備接口
[...]
SetupDiGetInterfaceDeviceDetail() //取得該設備接口的細節(設備路徑)
EX: iPod Downloader
SetupDiEnumDeviceInfo :不知道設備的GUID, 列舉出所有設備
呼叫順序:
SetupDiGetClassDevs(..., DIGCF_ALLCLASSES) //列舉出所有已安裝的設備 (第一個參數會被忽略)
[...]
SetupDiEnumDeviceInfo() //取得該設備的細節(設備路徑, 不用把GUID當作參數帶入)
EX: MobileDevice.dll
BOOL SetupDiEnumDeviceInterfaces(
HDEVINFO DeviceInfoSet, //設備訊息集
PSP_DEVINFO_DATA DeviceInfoData, //額外的設備描述
const GUID* InterfaceClassGuid, //GUID
DWORD MemberIndex, //設備訊息集裡的設備序號
PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData // Output
);
Parameters
DeviceInfoSet
[in] Handle to a device information set containing the devices for which to return interface information. This handle is typically returned by the SetupDiGetClassDevs or SetupDiGetClassDevsEx function.
DeviceInfoData
[in] Pointer to an SP_DEVINFO_DATA structure that constrains the search for interfaces to those of just one device in the device information set. This parameter is optional.
InterfaceClassGuid
[in] Pointer to a GUID that specifies the device interface class for the requested interface.
MemberIndex
[in] Zero-based index to the list of interfaces in the device information set. You should first call this function with the MemberIndex parameter set to zero to obtain the first interface. Then, repeatedly increment MemberIndex and retrieve an interface until this function fails and GetLastError returns ERROR_NO_MORE_ITEMS.
If the DeviceInfoData parameter specifies a particular device, MemberIndex applies only to the interfaces exposed by that device.
DeviceInterfaceData
[out] Pointer to an SP_DEVICE_INTERFACE_DATA structure that receives information for the device interface. You must set the cbSize member to sizeof( SP_DEVICE_INTERFACE_DATA) before calling this function.
------------------------------------------------------------------------------------------------------------------------------------------------------------
SetupDiEnumDeviceInfo
BOOL SetupDiEnumDeviceInfo(
HDEVINFO DeviceInfoSet, //設備訊息集
DWORD MemberIndex, //設備訊息集裡的設備序號
PSP_DEVINFO_DATA DeviceInfoData // Output
);
Parameters
DeviceInfoSet
[in] Handle to the device information set containing the devices for which to return element information.
MemberIndex
[in] Zero-based index to the list of interfaces in the device information set. You should first call this function with the MemberIndex parameter set to zero to obtain the first interface. Then, repeatedly increment MemberIndex and retrieve an interface until this function fails and GetLastError returns ERROR_NO_MORE_ITEMS.
DeviceInfoData
[out] Pointer to an SP_DEVINFO_DATA structure that receives information about this element. You must set the cbSize member to sizeof( SP_DEVINFO_DATA) before calling this function.
------------------------------------------------------------------------------------------------------------------------------------------------------------
SetupDiEnumDeviceInterfaces 跟 SetupDiEnumDeviceInfo 的差別
SetupDiEnumDeviceInterfaces :已經知道Class GUID, 只列舉出這個GUID符合的設備
呼叫順序:
SetupDiGetClassDevs() //列舉出特定GUID的Information Set
[...]
SetupDiEnumDeviceInterfaces() //列舉符合該GUID的設備接口
[...]
SetupDiGetInterfaceDeviceDetail() //取得該設備接口的細節(設備路徑)
EX: iPod Downloader
SetupDiEnumDeviceInfo :不知道設備的GUID, 列舉出所有設備
呼叫順序:
SetupDiGetClassDevs(..., DIGCF_ALLCLASSES) //列舉出所有已安裝的設備 (第一個參數會被忽略)
[...]
SetupDiEnumDeviceInfo() //取得該設備的細節(設備路徑, 不用把GUID當作參數帶入)
EX: MobileDevice.dll
2008年8月12日 星期二
Svchost.exe
打開進程列表后你會發現一大堆不知用途的進程,究竟是系統進程還是木馬病毒?如果打開系統文件夾,一大堆奇奇怪怪名稱的文件,更是會把你弄得暈頭轉向。很多朋友因此而始終抱有一種未知的恐懼,認為木馬、黑客無處不在,即使是高手,也不能把這些陌生的系統文件說個明明白白。
一、Svchost.exe進程介紹
打開“工作管理員”觀察系統中的進程,發現Svchost.exe有時竟然有5個之多(見圖1),可以試試逐個結束這些進程,有的可結束,有的結束后還會再生,有的結束后系統會提示“系統即將關機,離關機還有60秒”。
系統中的Svchost.exe進程是正常系統進程,不是病毒,雖然系統中有多個Svchost.exe進程是正常的,但也不保證都是正常的。
Svchost.exe是NT核心作業系統(Windows2000/XP/2003都屬于NT核心作業系統)獨有的進程,“Svchost”其實就是 “ServiceHost”(服務宿主)的縮寫。微軟官方對它的定義是:Svchost.exe是從動態鏈接庫(DLL)中營運的服務的通用主機進程名稱,通俗講,它就是一個服務裝載器。
由於Windows 2000/XP系統服務越來越多,以EXE單獨進程的形式啟動所有服務會大大增加系統負擔,為節省系統資源,微軟將一些系統服務以動態鏈接庫(DLL)形式實現,而Svchost.exe就是用來裝載這些DLL文件以啟動系統服務的程式。
那為什麼系統進程列表中的Svchost.exe會有多個呢?微軟為了讓系統能更好地進行服務控制,就允許多個Svchost.exe進程同時營運,每個 Svchost.exe進程可以包含一組服務。打開註冊表[HKEY_LOCAL_MACHINE\Software\Microsoft\ WindowsNT\CurrentVersion\Svchost]主鍵,在窗口右側可以看到許多鍵值,這裡的每個鍵值都代表一組服務,鍵值數據則包含了該組服務下面營運的服務名稱列表,每組服務啟動時都會透過單獨的Svchost.exe進程來裝載。WindowsXP中默認共有六組服務(見圖2),其中imgsvc、NetworkService、rpcss、termsvcs四個組,它們都只有一個服務營運,這些服務啟動后的 Svchost.exe進程用戶名為“SYSTEM”。而LocalService和netsvcs組都啟動了多個服務,它們的Svchost.exe進程用戶名分別為“LOCAL SERVICE”和“NETWORD SERVICE”。
當然了,這六組服務通常並不都是啟動狀態的,根據系統啟動的服務不同,反映在系統進程列表中的Svchost.exe進程數量也是不同的, WindowsXP會有四個到六個Svchost.exe進程,而Windows 2000通常則會有兩個Svchost.exe進程。
小提示
點擊“開始→執行”,在對話框中輸入“CMD”返回,然後在打開的命令行窗口中輸入“Tasklist /svc”(不含引號)命令,可以更直觀地看到每個Svchost.exe進程裝載的服務名稱列表。
獲取每組服務的詳細訊息
如果想更進一步了解Svchost.exe裝載的這些服務都是什麼功能,可以記下鍵值數據中的服務名稱,例如“RpcSs”,接著打開註冊表的 [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services],再打開下面的“RpcSs”子鍵,在右邊的“Description”鍵值中就可以看到該服務的描述,而在“ImagePath”鍵值數據中則可以看到這個服務的營運命令正是“% SystemRoot%\system32\svchost -krpcss”。而在“RpcSs”子鍵下還有一個“Parameters”(參數)子鍵,其右邊的“ServiceDll”鍵值數據“% SystemRoot%\system32\rpcss.dll”則表明了RpcSs服務啟動時調用的是系統目錄下的“Rpcss.dll”文件
如果覺得透過註冊表查詢服務名稱了解其屬性不太方便,也可以使用“全能助手用Windows服務管理專家”(以下簡稱“服務管理專家”)來查詢,營運軟體后單擊“All Win32Services”分支,在右側服務列表中根據服務名稱索引即可快速找到要查詢的服務,單擊服務名稱,即可看到該服務的啟動命令以及調用的 DLL文件等相關訊息(見圖5)。同時軟體還專門設計了Svchost Group分支,可以快速查詢LocalService和netsvcs組中的服務詳細訊息。
二.危險的Svchost.exe進程
由於Svchost.exe進程的特殊性,它隱藏了真正營運的程式的名稱,在表面看到的只是Svchost.exe進程,這個特性同時也讓許多病毒、木馬有空可鑽,企圖以此迷惑我們。那么如何判斷系統中的多個Svchost.exe進程是否正常呢?下面針對這類病毒常用的幾種欺騙手法來進行分析。
騙局1:利用假冒Svchost.exe名稱的病毒程式
火眼金睛:這種模式營運的病毒並沒有直接利用真正的Svchost.exe進程,而是啟動了另外一個名稱同樣是Svchost.exe的病毒進程,由於這個假冒的病毒進程並沒有加載系統服務,它和真正的Svchost.exe進程是不同的,我們只需在命令行窗口中營運一下“Tasklist/svc”,如果看到哪個Svchost.exe進程后面提示的服務訊息是“暫缺”(見圖6),而不是一個具體的服務名,那么它就是病毒進程了,記下這個病毒進程對應的 PID數值(進程標識符),即可在任務管理器的進程列表中找到它,結束進程后,在C盤搜索Svchost.exe文件,也可以用第三方進程工具直接查看該進程的路徑,正常的Svchost.exe文件是位于%systemroot%\System32目錄中的,而假冒的Svchost.exe病毒或木馬文件則會在其他目錄,例如“w32.welchina.worm”病毒假冒的Svchost.exe就隱藏在Windows\System32\Wins目錄中,將其刪除,並徹底清除病毒的其他數據即可。
騙局2:一些高級病毒則採用類似系統服務啟動的模式,透過真正的Svchost.exe進程加載病毒程式,而Svchost.exe是透過註冊表數據來決定要裝載的服務列表的,所以病毒通常會在註冊表中採用以下方法進行加載:
‧添加一個新的服務組,在組裡添加病毒服務名
‧在現有的服務組裡直接添加病毒服務名
‧修改現有服務組裡的現有服務屬性,修改其“ServiceDll”鍵值指向病毒程式
判斷方法:病毒程式要透過真正的Svchost.exe進程加載,就必須要修改相關的註冊表數據,我們可以打開[HKEY_LOCAL_MACHINE\ Software\Microsoft\WindowsNT\CurrentVersion\Svchost],觀察有沒有增加新的服務組,同時要留意服務組中的服務列表,觀察有沒有可疑的服務名稱,通常來說,病毒不會在只有一個服務名稱的組中添加,往往會選擇LocalService和netsvcs這兩個加載服務較多的組,以干擾我們的分析,還有透過修改服務屬性指向病毒程式的,透過註冊表判斷起來都比較困難,這時我們可以利用前面介紹的服務管理專家,分別打開LocalService和netsvcs分支,逐個檢查右邊服務列表中的服務屬性,尤其要注意服務描述訊息全部為英文的,很可能是第三方安裝的服務,同時要結合它的文件描述、版本、公司等相關訊息,進行綜合判斷。例如這個名為PortLessBackDoor的木馬程式,我們在服務列表中可以看到它的服務描述為“IntranetServices”,而它的文件版本、公司、描述訊息更全部為空(見圖7),如果是微軟的系統服務程式是絕對不可能出現這種現象的。從啟動訊息“C:\WINDOWS\System32\svchost.exe -knetsvcs”中可以看出這是一款典型的利用Svchost.exe進程加載營運的木馬,知道了其原理,清除方法也很簡單了:先用服務管理專家停止該服務的營運,然後營運regedit.exe打開“註冊表編輯器”,刪除[HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Services\IPRIP]主鍵,重新啟動計算機,再刪除%systemroot%\System32目錄中的木馬源程式“svchostdll.dll”,透過按時間排序,又發現了時間完全相同的木馬安裝程式“PortlessInst.exe”,一並刪除即可。
一、Svchost.exe進程介紹
打開“工作管理員”觀察系統中的進程,發現Svchost.exe有時竟然有5個之多(見圖1),可以試試逐個結束這些進程,有的可結束,有的結束后還會再生,有的結束后系統會提示“系統即將關機,離關機還有60秒”。
系統中的Svchost.exe進程是正常系統進程,不是病毒,雖然系統中有多個Svchost.exe進程是正常的,但也不保證都是正常的。
Svchost.exe是NT核心作業系統(Windows2000/XP/2003都屬于NT核心作業系統)獨有的進程,“Svchost”其實就是 “ServiceHost”(服務宿主)的縮寫。微軟官方對它的定義是:Svchost.exe是從動態鏈接庫(DLL)中營運的服務的通用主機進程名稱,通俗講,它就是一個服務裝載器。
由於Windows 2000/XP系統服務越來越多,以EXE單獨進程的形式啟動所有服務會大大增加系統負擔,為節省系統資源,微軟將一些系統服務以動態鏈接庫(DLL)形式實現,而Svchost.exe就是用來裝載這些DLL文件以啟動系統服務的程式。
那為什麼系統進程列表中的Svchost.exe會有多個呢?微軟為了讓系統能更好地進行服務控制,就允許多個Svchost.exe進程同時營運,每個 Svchost.exe進程可以包含一組服務。打開註冊表[HKEY_LOCAL_MACHINE\Software\Microsoft\ WindowsNT\CurrentVersion\Svchost]主鍵,在窗口右側可以看到許多鍵值,這裡的每個鍵值都代表一組服務,鍵值數據則包含了該組服務下面營運的服務名稱列表,每組服務啟動時都會透過單獨的Svchost.exe進程來裝載。WindowsXP中默認共有六組服務(見圖2),其中imgsvc、NetworkService、rpcss、termsvcs四個組,它們都只有一個服務營運,這些服務啟動后的 Svchost.exe進程用戶名為“SYSTEM”。而LocalService和netsvcs組都啟動了多個服務,它們的Svchost.exe進程用戶名分別為“LOCAL SERVICE”和“NETWORD SERVICE”。
當然了,這六組服務通常並不都是啟動狀態的,根據系統啟動的服務不同,反映在系統進程列表中的Svchost.exe進程數量也是不同的, WindowsXP會有四個到六個Svchost.exe進程,而Windows 2000通常則會有兩個Svchost.exe進程。
小提示
點擊“開始→執行”,在對話框中輸入“CMD”返回,然後在打開的命令行窗口中輸入“Tasklist /svc”(不含引號)命令,可以更直觀地看到每個Svchost.exe進程裝載的服務名稱列表。
獲取每組服務的詳細訊息
如果想更進一步了解Svchost.exe裝載的這些服務都是什麼功能,可以記下鍵值數據中的服務名稱,例如“RpcSs”,接著打開註冊表的 [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services],再打開下面的“RpcSs”子鍵,在右邊的“Description”鍵值中就可以看到該服務的描述,而在“ImagePath”鍵值數據中則可以看到這個服務的營運命令正是“% SystemRoot%\system32\svchost -krpcss”。而在“RpcSs”子鍵下還有一個“Parameters”(參數)子鍵,其右邊的“ServiceDll”鍵值數據“% SystemRoot%\system32\rpcss.dll”則表明了RpcSs服務啟動時調用的是系統目錄下的“Rpcss.dll”文件
如果覺得透過註冊表查詢服務名稱了解其屬性不太方便,也可以使用“全能助手用Windows服務管理專家”(以下簡稱“服務管理專家”)來查詢,營運軟體后單擊“All Win32Services”分支,在右側服務列表中根據服務名稱索引即可快速找到要查詢的服務,單擊服務名稱,即可看到該服務的啟動命令以及調用的 DLL文件等相關訊息(見圖5)。同時軟體還專門設計了Svchost Group分支,可以快速查詢LocalService和netsvcs組中的服務詳細訊息。
二.危險的Svchost.exe進程
由於Svchost.exe進程的特殊性,它隱藏了真正營運的程式的名稱,在表面看到的只是Svchost.exe進程,這個特性同時也讓許多病毒、木馬有空可鑽,企圖以此迷惑我們。那么如何判斷系統中的多個Svchost.exe進程是否正常呢?下面針對這類病毒常用的幾種欺騙手法來進行分析。
騙局1:利用假冒Svchost.exe名稱的病毒程式
火眼金睛:這種模式營運的病毒並沒有直接利用真正的Svchost.exe進程,而是啟動了另外一個名稱同樣是Svchost.exe的病毒進程,由於這個假冒的病毒進程並沒有加載系統服務,它和真正的Svchost.exe進程是不同的,我們只需在命令行窗口中營運一下“Tasklist/svc”,如果看到哪個Svchost.exe進程后面提示的服務訊息是“暫缺”(見圖6),而不是一個具體的服務名,那么它就是病毒進程了,記下這個病毒進程對應的 PID數值(進程標識符),即可在任務管理器的進程列表中找到它,結束進程后,在C盤搜索Svchost.exe文件,也可以用第三方進程工具直接查看該進程的路徑,正常的Svchost.exe文件是位于%systemroot%\System32目錄中的,而假冒的Svchost.exe病毒或木馬文件則會在其他目錄,例如“w32.welchina.worm”病毒假冒的Svchost.exe就隱藏在Windows\System32\Wins目錄中,將其刪除,並徹底清除病毒的其他數據即可。
騙局2:一些高級病毒則採用類似系統服務啟動的模式,透過真正的Svchost.exe進程加載病毒程式,而Svchost.exe是透過註冊表數據來決定要裝載的服務列表的,所以病毒通常會在註冊表中採用以下方法進行加載:
‧添加一個新的服務組,在組裡添加病毒服務名
‧在現有的服務組裡直接添加病毒服務名
‧修改現有服務組裡的現有服務屬性,修改其“ServiceDll”鍵值指向病毒程式
判斷方法:病毒程式要透過真正的Svchost.exe進程加載,就必須要修改相關的註冊表數據,我們可以打開[HKEY_LOCAL_MACHINE\ Software\Microsoft\WindowsNT\CurrentVersion\Svchost],觀察有沒有增加新的服務組,同時要留意服務組中的服務列表,觀察有沒有可疑的服務名稱,通常來說,病毒不會在只有一個服務名稱的組中添加,往往會選擇LocalService和netsvcs這兩個加載服務較多的組,以干擾我們的分析,還有透過修改服務屬性指向病毒程式的,透過註冊表判斷起來都比較困難,這時我們可以利用前面介紹的服務管理專家,分別打開LocalService和netsvcs分支,逐個檢查右邊服務列表中的服務屬性,尤其要注意服務描述訊息全部為英文的,很可能是第三方安裝的服務,同時要結合它的文件描述、版本、公司等相關訊息,進行綜合判斷。例如這個名為PortLessBackDoor的木馬程式,我們在服務列表中可以看到它的服務描述為“IntranetServices”,而它的文件版本、公司、描述訊息更全部為空(見圖7),如果是微軟的系統服務程式是絕對不可能出現這種現象的。從啟動訊息“C:\WINDOWS\System32\svchost.exe -knetsvcs”中可以看出這是一款典型的利用Svchost.exe進程加載營運的木馬,知道了其原理,清除方法也很簡單了:先用服務管理專家停止該服務的營運,然後營運regedit.exe打開“註冊表編輯器”,刪除[HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Services\IPRIP]主鍵,重新啟動計算機,再刪除%systemroot%\System32目錄中的木馬源程式“svchostdll.dll”,透過按時間排序,又發現了時間完全相同的木馬安裝程式“PortlessInst.exe”,一並刪除即可。
訂閱:
意見 (Atom)