系統環境
- InstallShield 版本:InstallShield 2015 Limited Edition for Microsoft Visual Studio 2010, 2012, 2013 and 2015
- Visual Studio 版本:Visual Studio 2010 專業版 SP1
相對路徑設置方法
相對路徑的表示方法
在 project assistant 的 application information 步驟中設置安裝包時,使用了相對路徑:
所添加的圖標的絕對路徑是:
C:\Users\zzs\Desktop\VV\BPLLQ\VS2010_CSHARP瀏覽器\Setup1\程序所需的其它文件\image
可是顯示出來卻是:
<ISProjectFolder>\程序所需的其它文件\image\main.ico
其中<ISProjectFolder>
所替代的那部分路徑,也正是我們建立 InstallShield 項目時選擇的路徑,即<ISProjectFolder>
是 InstallShield 項目所在的文件夾。
將文件的絕對路徑修改爲相對路徑
向安裝包中添加文件有兩種方法,一個是 project assistant 中的 application files 界面,另一個是 specify application data 中的 files 界面,這兩種方法都無法直接添加相對路徑。
要想使用相對路徑,必須先將文件保存到 InstallShield 項目所在的文件夾,然後以絕對路徑的方式添加文件,最後再修改成相對路徑。
我們以在 files 界面中添加C:\Users\zzs\Desktop\VV\BPLLQ\VS2010_CSHARP瀏覽器\Setup1\程序所需的其它文件\test.txt
文件爲例。
添加之後,可以在 link to 列看到 test.txt 文件的絕對路徑。
接下來,我們關閉vs2010,開始修改路徑。
用記事本打開 InstallShield 項目所在的文件夾下的 isl 格式的文件,此例中該文件位置爲C:\Users\zzs\Desktop\VV\BPLLQ\VS2010_CSHARP瀏覽器\Setup1\Setup1.isl
。
打開後可以看出,該 isl 文件內容是 xml 格式。我們添加的文件全都寫在<table name="File">
元素中,內容如下:
<table name="File">
<col key="yes" def="s72">File</col>
<col def="s72">Component_</col>
<col def="s255">FileName</col>
<col def="i4">FileSize</col>
<col def="S72">Version</col>
<col def="S20">Language</col>
<col def="I2">Attributes</col>
<col def="i2">Sequence</col>
<col def="S255">ISBuildSourcePath</col>
<col def="I4">ISAttributes</col>
<col def="S72">ISComponentSubFolder_</col>
<row><td>File</td><td>Component</td><td>cs_fxb_win_hook.主輸出</td><td>0</td><td/><td/><td>0</td><td>1</td><td><cs_fxb_win_hook>|Built</td><td>3</td><td/></row>
<row><td>File1</td><td>Component1</td><td>set_ini.主輸出</td><td>0</td><td/><td/><td>0</td><td>1</td><td><set_ini>|Built</td><td>3</td><td/></row>
<row><td>File2</td><td>Component2</td><td>KeyBoardHook.主輸出</td><td>0</td><td/><td/><td>0</td><td>1</td><td><KeyBoardHook>|Built</td><td>3</td><td/></row>
<row><td>File3</td><td>Component4</td><td>dis_cad_dll.主輸出</td><td>0</td><td/><td/><td>0</td><td>1</td><td><dis_cad_dll>|Built</td><td>3</td><td/></row>
<row><td>File4</td><td>Component5</td><td>MouseHook.主輸出</td><td>0</td><td/><td/><td>0</td><td>1</td><td><MouseHook>|Built</td><td>3</td><td/></row>
<row><td>File5</td><td>Component6</td><td>dis_start.主輸出</td><td>0</td><td/><td/><td>0</td><td>1</td><td><dis_start>|Built</td><td>3</td><td/></row>
<row><td>disable_the_accessibility_sh</td><td>Component3</td><td>Disable_the_Accessibility_Shortcut_Keys.主輸出</td><td>0</td><td/><td/><td>0</td><td>1</td><td><Disable_the_Accessibility_Shortcut_Keys>|Built</td><td>3</td><td/></row>
<row><td>main.ico</td><td>ISX_DEFAULTCOMPONENT2</td><td>main.ico</td><td>0</td><td/><td/><td/><td>1</td><td><ISProjectFolder>\程序所需的其它文件\image\main.ico</td><td>1</td><td/></row>
<row><td>no_mainurl.html</td><td>ISX_DEFAULTCOMPONENT1</td><td>NOMAIN~1.HTM|no mainURL.html</td><td>0</td><td/><td/><td/><td>1</td><td><ISProjectFolder>\程序所需的其它文件\error page\no mainURL.html</td><td>1</td><td/></row>
<row><td>set.ini</td><td>ISX_DEFAULTCOMPONENT</td><td>set.ini</td><td>0</td><td/><td/><td/><td>1</td><td><ISProjectFolder>\程序所需的其它文件\set.ini</td><td>1</td><td/></row>
<row><td>test.txt</td><td>ISX_DEFAULTCOMPONENT</td><td>test.txt</td><td>0</td><td/><td/><td/><td>1</td><td>C:\Users\zzs\Desktop\VV\BPLLQ\VS2010_CSHARP瀏覽器\Setup1\程序所需的其它文件\test.txt</td><td>1</td><td/></row>
</table>
可見倒數第二行中記錄的就是 test.txt 文件的信息,修改改行即可將 test.txt 文件的絕對路徑修改爲相對路徑。
但是,不是直接用<ISProjectFolder>
來替代C:\Users\zzs\Desktop\VV\BPLLQ\VS2010_CSHARP瀏覽器\Setup1
,否則,再次打開vs時,就會報錯,大致內容是“td中出現意外元素”,它所說的意外元素就是<ISProjectFolder>
。
原因自然是<ISProjectFolder>
被當做了 xml 格式的一部分,所以纔會被 xml 中的 td 識別爲元素。正確的方法是按照 xml 的格式來書寫,使它和文件路徑一樣,僅僅是一串字符串。
按照 xml 的語法,我們應該將<ISProjectFolder>
的尖括號用轉義符代替,即,分別用<
和>
,來代替<
和>
。
所以,倒數第二行修改後應該變成:
<row><td>test.txt</td><td>ISX_DEFAULTCOMPONENT</td><td>test.txt</td><td>0</td><td/><td/><td/><td>1</td><td><ISProjectFolder>\程序所需的其它文件\test.txt</td><td>1</td><td/></row>
修改好後,保存並關閉文件,重新打開vs,test.txt 文件的路徑就顯示爲了相對路徑,這時候就不用擔心項目文件夾移動到其它目錄下引起的“文件找不到”的錯誤了。
至此,相對路徑修改完畢。