information

 爲什麼會在某些系統中顯示錯誤消息“安裝程序文件已被破壞”?
* 安裝程序給出一條消息“不能註冊 DLL/OCX: DllRegisterServer 輸出未找到”
* 程序卸載後,安裝程序創建的目錄仍存在功能
* 翻譯 Inno Setup 文字
* 它支持 MBCS (多字節字符集) 嗎?
* 將來會支持 Windows Installer 嗎?
* 怎樣更改 Setup.exe 的圖標?
* 可以用 Inno Setup 創建一個帶條件的安裝程序嗎 - 例如,僅在某個註冊表鍵或文件存在時進行?
* “網絡安裝”功能在哪裏?
* 可以不使用 /SILENT 或 /VERYSILENT 命令行參數創建一個後臺安裝程序嗎?
* 安裝程序可以使用讀取註冊表值作爲默認的安裝目錄嗎?
問題
* 編譯器說“參數引號錯配或放置不當"
* 雙擊安裝程序創建的快捷方式時不能找到我的應用程序一些文件在資源管理器中雙擊 應用程序的 EXE 文件時能正常工作
* 在沒有卸載老版本的情況下我安裝新版本的應用程序,在控制面板的添加/刪除程序中出現兩個條目
* 我在 [Run] 段運行一個批處理文件,但完成執行後窗口仍留在屏幕中,我想讓它在“退出時關閉”
* 我已經在腳本中更改了 DefaultDirName,但當我運行安裝程序時還是默認爲以前的目錄
* 我有兩個相同名字的 [Icons] 條目,但只安裝了一個
* 安裝不等待程序 [Run] 段條目完成執行
* 選擇安裝程序語言對話框中丟失了某些語言,或不能全部顯示
安裝任務
* 創建 Internet (URL) 快捷方式
* 在快速運行欄創建快捷方式
* 在快捷方式中設置“起始位置”對象
* 創建文件關聯
* 設置環境變量
* 在 MS-DOS 程序快捷方式設置“退出時關閉”框
* 替換文件之前製作備份
* 根據 Windows 版本安裝不同的文件
* 設置文件、目錄或註冊表鍵許可
* 我的安裝程序需要做一些 Inno Setup 目前還沒有的功能
怎樣安裝...?
* OCX 文件
* Visual Basic 系統文件
* Visual C 系統文件 (例如 MFC)
* COMCTL32.DLL
* BDE (Borland 數據庫引擎)
* MDAC,ADO,Jet 等
兼容性
* 操作系統兼容性
* Windows NT/2000/XP 管理員權限
雜項
* 製作的安裝程序有沒有多大文件限制?
* 單擊用戶在安裝期間單擊“取消”後發生什麼?
功能
翻譯 Inno Setup 文字
翻譯 Inno Setup 文字爲其它語言不需要修改源代碼只要簡單地製作一個 Default.isl 文件 (包含在 Inno Setup) 的副本並編輯其中的文字就行了(不要直接編輯 Default.isl 文件,否則你的更改將在安裝新版本的 Inno Setup 後丟失) 在 Inno Setup 幫助文件中查看“[Messages] 段”獲取一些重要提示
一旦你完成新的 .isl 文件編輯,在 [Languages] 段創建一個條目告訴編輯器你要使用它:
[Languages]
Name: mytrans; MessagesFile: "compiler:MyTranslation.isl"
如果你使用 4.0 之前的 Inno Setup 版本,用下列替換:
[Setup]
MessagesFile=compiler:MyTranslation.isl
在下列網頁中有許多其它人提供的翻譯可用: Inno Setup 第三方文件頁,還有一個能編輯 .isl 文件的程序
它支持 MBCS (多字節字符集) 嗎?
Inno Setup 2.0.6 添加了完善的 MBCS 支持在所有文件名和常量解析中使用了頭字節檢查,因此應該不會出現使用反斜框字符 (“/”) 或括號 (“{”) 錯誤
2.0.6 及以前版本不包含任何 MBCS 的特殊支持
將來會支持 Windows Installer 嗎?
現在我還沒有打算編寫 Windows Installer 版本的 Inno Setup“Supporting” Windows Installer 好象還沒有完善一點的編寫器 - 有些東西我還沒有興趣去做
怎樣更改 Setup.exe 的圖標?
安裝程序的圖標可以通過設置 [Setup] 段的 SetupIconFile 進行更改要設置卸載程序的圖標,設置 UninstallIconFile
可以用 Inno Setup 創建一個帶條件的安裝程序嗎 - 例如,僅在某個註冊表鍵或文件存在時進行?
Inno Setup 4 添加了支持這個的新 Pascal 腳本功能
注意: 用早期的 Inno Setup 版本它已經提供根據 Windows 版本安裝不同的文件
“網絡安裝”功能在哪裏?
沒有,這次寫入的版本我還沒有添加這樣的功能
可以不使用 /SILENT 或 /VERYSILENT 命令行參數創建一個後臺安裝程序嗎?
沒有,也不打算添加這樣的功能 (它會被濫用)如果你的目的是保護用戶交互讓它最小化,使用禁用 [Setup] 段指示
安裝程序可以使用讀取註冊表值作爲默認的安裝目錄嗎?
是的在 DefaultDirName 中使用一個 {reg:...} 常量例如:
[Setup]
DefaultDirName={reg:HKLM/Software/My Program,Path|{pf}/My Program}
查閱 Inno Setup 幫助文件中的“常量”主題獲取更多 {reg:...} 常量的信息
問題
編譯器說“參數引號錯配或放置不當"
如果你嘗試在一個參數數據中嵌入一個引號 (") 字符,但不完整 (只有一個) 時顯示這個消息在 Inno Setup 幫助主題中查閱“段中參數”獲取更多信息
雙擊安裝程序創建的快捷方式時不能找到我的應用程序一些文件在資源管理器中雙擊 應用程序的 EXE 文件時能正常工作
你的應用程序很可能未指定嘗試打開的文件路徑名,因此它在當前目錄查找Inno Setup 默認在它創建的快捷方式中不設置“起始位置”對象;這會導致 Windows 拾取它自已的目錄,通常不是包含你應用程序的目錄
實際上所有的事例中,這是一些應該創建的應用程序同層的東西通常設計的 GUI 應用程序應該不會期待從特殊目錄中啓動;它們應該總是指定打開文件的完整路徑名在 Delphi 或 C Builder,例如,它可以通過下列調用獲取包含應用程序 EXE 的完整路徑名: ExtractFilePath(ParamStr(0))要獲取在應用程序目錄中的名爲“File.txt”的完整路徑,使用: ExtractFilePath(ParamStr(0)) 'File.txt'
如果因某些原因你不能在應用程序層中修正這個問題,你可以通過在 [Icons] 段添加“WorkingDir: {app}”告訴 Inno Setup 設置“起始位置”對象
爲什麼會在某些系統中顯示錯誤消息“安裝程序文件已被破壞”?
這個錯誤消息在隸屬安裝程序的一個文件 (例如 setup.exe,setup.1) 大小錯誤,或部分文件 CRC 校驗失敗時顯示它不會沒有任何理由顯示
如果你的安裝程序通過 internet 分佈,且在獲取時有許多錯誤報告,它可能因爲你的網絡服務器故障傳送部分文件錯誤
如果你的安裝程序通過 CD-ROM 或軟盤分佈,CD-ROM 或軟盤可能已壞,或設備有問題
在沒有卸載老版本的情況下我安裝新版本的應用程序,在控制面板的添加/刪除程序中出現兩個條目
這在你更改了 AppId 版本時會發生,或如果未指定 AppId 和 AppName.如果你這樣做,安裝程序不知道同一應用程序的兩個版本,因此將在添加/刪除程序中創建新條目同時將創建一個新的卸載記錄文件 (unins???.dat)最好的方法是更改 AppId 和 AppName
如果你在新版本中必須改變 AppName,設置 AppId 先前版本的 AppId 或 AppName 值
安裝程序給出一條消息“不能註冊 DLL/OCX: DllRegisterServer 輸出未找到”
這個消息通常意味着你在文件中指定了“regserver”標記,但它不能註冊從 [Files] 條目中刪除“regserver”標記就不會出錯這個消息
程序卸載後,安裝程序創建的目錄仍存在
這個有幾個說明爲什麼目錄沒有被刪除:
* 目錄在安裝前已經存在按默認,卸載程序爲了安全起見不刪除安裝程序沒有創建的目錄
* 它含有文件或子目錄如果你需要卸載程序刪除其它的文件/目錄,使用 [UninstallDelete]
* 在當前目錄中還有一個進程正在運行
注意: 在 Inno Setup 2.0.1 以有版本中,目錄必須指定在 [Dirs] 或 [UninstallDelete] 段才能被卸載程序刪除在新的 Inno Setup 版本中,用 [Files] 段條目創建的目錄將被卸載程序自動刪除 (如果它不是用先前的安裝程序創建)
我在 [Run] 段運行一個批處理文件,但完成執行後窗口仍留在屏幕中,我想讓它在“退出時關閉”"
來自 Tim Rude:
簡單地讓批處理文件在退出後自動關閉是,使用 CLS 命令在結束時清除屏幕
--- 批處理文件 1 ---
@echo off
echo Hello World
echo 這個批處理文件在退出時不關閉
--- 批處理文件 2 ---
@echo off
echo Hello World
echo 這個批處理文件在退出時關閉
cls
我已經在腳本中更改了 DefaultDirName,但當我運行安裝程序時還是默認爲以前的目錄
在啓動安裝程序時在註冊表中發現如果以前已經安裝了相同的應用程序,它將使用以前安裝的目錄作爲默認目錄在安裝嚮導中提供給用戶如果卸載應用程序再運行安裝程序,它將使用新的 DefaultDirName 設置如果你想禁用這個功能,設置 UsePreviousAppDir 爲“no”
我有兩個相同名字的 [Icons] 條目,但只安裝了一個
兩個文件不能用相同的名字,快捷方式其實也是文件,因此兩個快捷方式不能用相同的名字
安裝不等待程序 [Run] 段條目完成執行
首先,請確認你在 [Run] 條目中沒有使用“nowait”或“waituntilidle”標記這些標記防止安裝程序在進程完成終止前等待
如果你沒有使用這些標記,但它還是好象不等待程序完成,那麼很可能你正在運行的 EXE 分出其它進程肯不能用它自身直接終止,導致安裝程序認爲該程序已經完成現在已知在老的 InstallShield-based 安裝程序會偶爾發生 (要圍繞它工作,嘗試使用 /SMS 切換)
一個簡單的檢查方法,如果程序從命令行運行“START /WAIT ProgramName.exe”,在程序退出前返回到命令提示時查看
選擇安裝程序語言對話框中丟失了某些語言,或不能全部顯示
從 Inno Setup 4.2.2 開始,, languages specified in the [Languages] section that cannot be displayed under the 活動 Windows ANSI 代碼頁下不能顯示的 [Languages] 段中指定的語言,不再在選擇安裝語言對話框中列出例如,俄語只能在活動代碼頁是 1251 的情況下顯示;如果用戶不是運行在代碼頁 1251,那麼他們不能在選項中看到俄語選項
在 Windows XP 中,活動代碼頁可以在控制面板的區域和語言選項中進行更改,並在高級標籤中設置非 Unicode 程序語言,然後點擊設置默認...
如果你能保存你正在正確的代碼頁中運行,並且語言仍不能列出,那麼很可能是 .isl 語言文件中的 LanguageID 設置錯誤
如果你想讓所有的語言強制可見,不考慮它們是否可以在使用的活動代碼頁下正確顯示,請在腳本中添加以下內容:
[LangOptions]
LanguageCodePage=0
安裝任務
創建 Internet (URL) 快捷方式
先創建一個文件名,例如“website.url” ,其後在內部寫入這些行:
[InternetShortcut]
URL=http://web.site.address/
然後添加下列行到你的腳本:
[Files]
Source: "website.url"; DestDir: "{app}"
[Icons]
Name: "{group}/訪問我的網站"; Filename: "{app}/website.url"
在快速運行欄創建快捷方式
升級到至少 Inno Setup 1.3.11 版,然後使用:
[Icons]
Name: "{userappdata}/Microsoft/Internet Explorer/Quick Launch/My Program"; Filename: "{app}/MyProg.exe"
在快捷方式中設置“起始位置”對象
在 [Icons] 段條目中使用一個 WorkingDir 參數
創建文件關聯
先設置 [Setup] 段指示“ChangesAssociations”爲“yes”然後根據下面顯示創建 [Registry] 條目
[Registry]
Root: HKCR; Subkey: ".myp"; ValueType: string; ValueName: ""; ValueData: "MyProgramFile"; Flags: uninsdeletevalue
“.myp”是我們要關聯的擴展名“MyProgramFile”是貯存在註冊表中的文件類型內部名字請確認你使用了一個唯一的名字,這樣你不會一不小心覆蓋其它應用程序的註冊表鍵
Root: HKCR; Subkey: "MyProgramFile"; ValueType: string; ValueName: ""; ValueData: "My Program File"; Flags: uninsdeletekey
“My Program File”是顯示在資源管理器中的文件類型的名字
Root: HKCR; Subkey: "MyProgramFile/DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}/MYPROG.EXE,0"
“DefaultIcon”是指定與文件類型關聯的文件名包含的圖標的註冊表鍵“,0”告訴資源管理器使用 MYPROG.EXE 中的第一個圖標索引(“,1”表示第二個圖標索引)
Root: HKCR; Subkey: "MyProgramFile/shell/open/command"; ValueType: string; ValueName: ""; ValueData: """{app}/MYPROG.EXE"" ""%1"""
“shell/open/command”是指定在資源管理器雙擊該文件類型時執行的程序的註冊表鍵命令行中的引號是讓它可以正確處理長文件名
設置環境變量
在 Windows NT/2000/XP,環境變量是用字符串值貯存的註冊表中,因此可以使用 [Registry] 段進行操作系統寬度環境變量位於:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Contro l/Session Manager/Environment
用戶指定環境變量位於:
HKEY_CURRENT_USER/Environment
在 Windows 95/98/Me,你需要修改 AUTOEXEC.BAT 設置環境變量Inno Setup 不包括進行設置的內置功能,可以是你可寫一個小程序通過在 [Run] 段運行它進行設置(更多信息)
在 MS-DOS 程序快捷方式設置“退出時關閉”框
Inno Setup 1.3.15 及更高版本支持在 [Icons] 段的“closeonexit”和“dontcloseonexit”標記
替換文件之前製作備份
Inno Setup 目前還沒有執行備份的特殊功能,但你可以通過在 [Files] 段條目中象下面這樣在替換前先製作一個文件副本:
Source: "{app}/MyProg.exe"; DestDir: "{app}/backup"; Flags: external skipifsourcedoesntexist uninsneveruninstall
根據 Windows 版本安裝不同的文件
這可以在條目中的 MinVersion 和/或 OnlyBelowVersion 參數來完成在幫助文檔中查看公共參數主題獲取詳細資料
這裏有一個簡單地的例子說明怎樣安裝一個文件到 NT 平臺 (Windows NT/2000/XP) 以及其它文件安裝到非 NT 平臺 (Windows 95/98/Me):
[Files]
Source: "{app}/WinNT2000XP.exe"; DestDir: "{app}"; MinVersion: 0, 1
Source: "{app}/Win9598Me.exe"; DestDir: "{app}"; MinVersion: 1, 0
“0”表示從不安裝;“1”表示在任何版本安裝 (例如 version 1.0 或更高)
注意: 上述方法不只限制爲 [Files] 段;MinVersion 和 OnlyBelowVersion 可以在大多數段中使用
設置文件、目錄或註冊表鍵許可
從 Inno Setup 4.1.0 開始,[Dirs],[Files] 和 [Registry] 段支持設置目錄、文件和註冊表鍵許可的許可參數
如果你需要更高高級需求,查閱 SetACL
我的安裝程序需要做一些 Inno Setup 目前還沒有的功能
查閱 How-To 文檔執行自定義功能
怎樣安裝...?
OCX 文件
推薦你用下列方法安裝 OCX 文件
[Files]
Source: "ComCtl32.ocx"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace sharedfile regserver
Visual Basic 系統文件
查閱這個 How-To 文檔
Visual C 系統文件 (例如 MFC)
查閱這個 How-To 文檔
COMCTL32.DLL
如果你的安裝程序需要一個更新版本的 COMCTL32.DLL,你可以指引用戶從 Microsoft 下載 COMCTL32 更新版本,或從你的安裝程序通過使用下列語句調用 COMCTL32 更新:
[Files]
Source: "50comupd.exe"; DestDir: "{tmp}"
[Code]
function ShouldInstallComCtlUpdate: Boolean;
var
MS, LS: Cardinal;
begin
// Only install if the existing comctl32.dll is < 5.80
Result := False;
if GetVersionNumbers(ExpandConstant('{sys}/comctl32.d ll'), MS, LS) then
if MS < $00050050 then
Result := True;
end;
[Run]
Filename: "{tmp}/50comupd.exe"; Parameters: "/r:n /q:1"; Check: ShouldInstallComCtlUpdate
不能嘗試直接使用 [Files] 段安裝 COMCTL32.DLL;Microsoft 不允許這樣做,而且這這樣做很危險
BDE (Borland 數據庫引擎)
查閱 How-To 文檔安裝 BDE 獲取使用 Inno Setup 配置 32 位的詳細資料
MDAC,ADO,Jet 等
查閱這個 How-To 文檔
兼容性
操作系統兼容性
當前支持的平臺包括 Windows 95,98,2000,XP,Me 和 NT 4.0
我當前是在 Windows 2000 平臺上使用和開發,因此對 Windows 2000 的兼容性是可靠的
當引入新的主功能時,我通常在所有支持的 Windows 版本中進行測試
16 位版本的 Inno Setup 已在版本 1.3 中放棄Windows NT 3.51 支持在版本 3.0 中放棄
Windows NT/2000/XP 管理員權限
典型的 Inno Setup 安裝程序在 Windows NT/2000/XP 中運行不需要管理員或“超級用戶”權限除非下面註明的部分
用 Windows NT/2000/XP 中需要管理員權限:
* 在腳本中的 [Setup] 段使用“AdminPrivilegesRequired=yes”這會使安裝程序在缺少管理員權限的用戶安裝時出現錯誤消息並中斷(默認設置中 AdminPrivilegesRequired 指示是“no”)
* 在 [Files] 段使用“restartreplace”這個功能會使 Inno Setup 調用 MoveFileEx 功能,嘗試寫入到“HKEY_LOCAL_MACHINE/ SYSTEM/ CurrentControlSet/ Control/ Session Manager” 寫入這些註冊表必須要有管理員權限
* 用 [Registry] 段在 HKEY_USERS/.DEFAULT 下寫入任何鍵寫入這些註冊表必須要有管理員權限
在 Windows 2000/XP 中需要管理員或“超級用戶”權限之一:
* 在 [Files] 段使用“regserver”標記在大多數場合中註冊一個 DLL 寫入到 HKEY_CLASSES_ROOT,普通用戶是沒有權限的
* 在 [Files] 段使用“sharedfile”標記這個標記會使 Inno Setup 創建/更新在“HKEY_LOCAL_MACHINE/ SOFTWARE/ Microsoft/ Windows/ CurrentVersion/ SharedDLLs”中的一個值普通用戶不允許寫入這些鍵值
* 在 [Files] 段使用 FontInstall 參數
* 在 [Registry] 段在 HKEY_LOCAL_MACHINE 或 HKEY_CLASSES_ROOT 下寫入任何鍵普通用戶不允許寫入這些鍵值
Inno Setup 自身不需要寫入到 WINNT 目錄,或上述提及的任何註冊表鍵
當安裝程序被一個沒有管理員權限的用戶安裝有什麼不同呢?
* 添加/刪除程序控制面板條目註冊表鍵創建在 HKEY_CURRENT_USER 下而不是 HKEY_LOCAL_MACHINE 中因此,只有安裝的用戶可以在添加/刪除程序條目看到它
* “{group}”常量總是指向當前用戶配置文件,同時指向所有用戶配置文件
* 所有“{common...}”常量等同於“{user...}”常量
* 該程序可以被其它用戶卸載(當管理員安裝程序,只有管理員允許卸載)
雜項
製作的安裝程序有沒有多大文件限制?
http://www.zbedu.net/yuwen/user1/376/archives/2006 /5292.html
Inno Setup 沒有在單個安裝程序中限制多大文件、快捷方式、註冊表條目等但是,安裝程序腳本中的每個條目都需要一定數量的內存例如,每個 [Files] 條目大概需要 120 字節的內存
在 Inno Setup 3.x 及更早版本中,安裝程序和單個文件不能超過 2 GB,因爲它不使用 64 位算法這已經在 Inno Setup 4 中添加
單擊用戶在安裝期間單擊“取消”後發生什麼?
當單擊“取消”時,安裝程序將開始用非常類似卸載程序的模式回覆先前製作的更改因此,不會剩下部分已安裝的程序
[www.gdjyzsw.com 廣東學習網]

發佈了31 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章