1. 程式人生 > >在用installshield製作安裝包時如何在登錄檔中寫檔案關聯

在用installshield製作安裝包時如何在登錄檔中寫檔案關聯

     最近在學習用installshield製作安裝包,這兩天遇到需要寫登錄檔的問題:通過登錄檔設定檔案關聯,即將一個帶有特殊字尾的檔案連線到一個應用程式上。怎麼在installshield中進行設定呢?

首先我們先來學習一下注冊表,以下內容為轉載

認識登錄檔

一、六大根鍵的作用
在登錄檔中,所有的資料都是通過一種樹狀結構以鍵和子鍵的方式組織起來,十分類似於目錄結構。每個鍵都包含了一組特定的資訊,每個鍵的鍵名都是和它所包含的資訊相關的。如果這個鍵包含子鍵,則在登錄檔編輯器視窗中代表這個鍵的資料夾的左邊將有“+”符號,以表示在這個資料夾中有更多的內容。如果這個資料夾被使用者打開了,那麼這個“+”就會變成“-”。

1.HKEY_USERS

該根鍵儲存了存放在本地計算機口令列表中的使用者標識和密碼列表。每個使用者的預配置資訊都儲存在 HKEY_USERS 根鍵中。 HKEY_USERS 是遠端計算機中訪問的根鍵之一。

2.HKEY_CURRENT_USER

該根鍵包含本地工作站中存放的當前登入的使用者資訊 , 包括使用者登入使用者名稱和暫存的密碼 ( 注:此密碼在輸入時是隱藏的 ) 。使用者登入 Windows 98 時,其資訊從 HKEY_USERS 中相應的項拷貝到 HKEY_CURRENT_USER 中。

3.HKEY_CURRENT_CONFIG

該根鍵存放著定義當前使用者桌面配置 ( 如顯示器等 ) 的資料 , 最後使用的文件列表( MRU )和其他有關當前使用者的 Windows 98 中文版的安裝的資訊。

4.HKEY_CLASSES_ROOT

包含註冊的所有ole資訊和文件型別,是從 hkey_local_machine\software\classes複製的。根據在 Windows 98 中文版中安裝的應用程式的副檔名 , 該根鍵指明其檔案型別的名稱 。

5.HKEY_LOCAL_MACHINE

該根鍵存放本地計算機硬體資料 , 此根鍵下的子關鍵字包括在 SYSTEM.DAT 中 , 用來提供 HKEY_LOCAL_MACHINE 所需的資訊 , 或者在遠端計算機中可訪問的一組鍵中。

該根鍵中的許多子鍵與 System.ini 檔案中設定項類似。

6.HKEY_DYN_DATA

該根鍵存放了系統在執行時動態資料,此資料在每次顯示時都是變化的,因此,此根鍵下的資訊沒有放在登錄檔中。

二、六大根鍵的關係

雖然在登錄檔中,六個根鍵看上去處於一種並列的地位,彼此毫無關係。但事實上,HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG中存放的資訊都是HKEY_LOCAL_MACHINE中存放的資訊的一部分,而HKEY_CURRENT_USER中存放的資訊只是HKEY_USERS存放的資訊的一部分。

HKEY_LOCAL_MACHINE包括HKEY_CLASSES_ROOT和HKEY_CURRENT_USER中所有的資訊。在每次系統啟動後,系統就映射出HKEY_CURRENT_USER中的資訊,使得使用者可以檢視和編輯其中的資訊。

實際上,HKEY_LOCAL_MACHINE\SOFTWARE\Classes就是HKEY_CLASSES_ROOT,為了使用者便於檢視和編輯,系統專門把它作為一個根鍵。同理,HKEY_CURRENT_CONFIG\SYSTEM\Current Control就是HKEY_LOCAL_MACHINE\SYSTEM\Current Control。

HKEY_USERS中儲存了預設使用者和當前登入使用者的使用者資訊。HKEY_CURRENT_USER中儲存了當前登入使用者的使用者資訊。

HKEY_DYN_DATA儲存了系統執行時的動態資料,它反映出系統的當前狀態,在每次執行時都是不一樣的,即便是在同一臺機器上。

三、認識鍵和子鍵

登錄檔通過鍵和子鍵來管理各種資訊。但是,登錄檔中的所有資訊是以各種形式的鍵值項資料儲存下來。在登錄檔編輯器右窗格中,儲存的都是鍵值項資料。這些鍵值項資料可分為如下三種類型:

1. 字串值

在登錄檔中,字串值一般用來表示檔案的描述、硬體的標識等。通常它由字母和數字組成,最大長度不能超過 255 個字元。比如“ D:\pwin98\trident 即為鍵值名“ a ”的鍵值,它是一種字串值型別的。同樣地,“ ba ”也為鍵值名“ MRUList的鍵值。通過鍵值名、鍵值就可以組成一種鍵值項資料,這就相當於 Win.ini 、 Ssyt-em.ini 檔案中小節下的設定行。其實,使用登錄檔編輯器將這些鍵值項資料匯出後,其形式與 INI 檔案中的設定行完全相同。

2. 二進位制值

在登錄檔中,二進位制值是沒有長度限制的,可以是任意個位元組長。在登錄檔編輯器中,二進位制以十六進位制的方式顯示出來。比如鍵值名 Wizard 的鍵值“ 80 00 00 00 ”就是一個二進位制。

3. DWORD 值

DWORD 值是一個 32 位( 4 個位元組,即雙字)長度的數值。在登錄檔編輯器中,您將發現系統會以十六進位制的方式顯示 DWORD 值。在編輯 DWORD 數值時,可以選擇用十進位制還是 16 進位制的方式進行輸入。

通過登錄檔設定檔案關聯,即將一個帶有特殊字尾的檔案連線到一個應用程式上。在登錄檔中,有四個子鍵都儲存了檔案管理的資料,它們分別是:HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USER。在預設情況下,所有後綴為1ST的檔案都被連線到記事本程式(Notepad)上。如果您在Windows資源管理器雙擊該字尾的檔案,則系統將啟用記事本,同時將此檔案調入編輯。但是您也可此檔案關聯從Notepad改為Lotus Ami Pro(這也是一個字處理程式),則您在雙擊字尾為1ST的檔案時,將啟用Lotus Ami Pro程式,同時編輯此檔案。但是,如果您在直接編輯登錄檔時只修改一個子鍵,則會出現如下四種情況:

● 如果只修改HKEY_CLASSES_ROOT中的1ST項,則在雙擊1ST字尾的檔案時將啟用Lotus Ami Pro。

● 如果只修改HKEY_CURRENT_USER中的1ST項,則在雙擊1ST字尾的檔案時將啟用Notepad。

● 如果只修改HKEY_LOCAL_MACHINE中的1ST項,則在雙擊1ST字尾的檔案時將啟用Lotus Ami Pro。

● 如果只修改HKEY_USER中的1ST項,則在雙擊1ST字尾的檔案時將啟用Notepad。

在上面的例子中,HKEY_CLASSES_ROOT子鍵和HKEY_LOCAL_MACHINE子鍵看起來在控制檔案關聯上相互獨立,這似乎有些自相矛盾,但是,要知道HKEY_CLASSES_ROOT根鍵就是HKEY_LOCAL_MACHINE\Software\Classes,因此,在改變HKEY_CLASSES_ROOT根鍵就是改變HKEY_LOCAL_MACHINE。

在登錄檔中寫檔案關聯(注:以下內容為原創)

假設我們要為.tpl格式的檔案建立檔案關聯,用TPTL.exe應用程式開啟.tpl格式的檔案。

主要修改兩個根鍵:HKEY_CLASSES_ROOTHKEY_USERS

HKEY_CLASSES_ROOT的註冊檔案如下:

[HKEY_CLASSES_ROOT\.tpl]
@="TPLT"
"Content Type"="text/plain"
[HKEY_CLASSES_ROOT\.tpl\shell]
[HKEY_CLASSES_ROOT\.tpl\shell\open]
[HKEY_CLASSES_ROOT\.tpl\shell\open\command]
@="C:\Program Files\Produt Name\TPLT.exe"

注意:

1、@表示Default Value子鍵;

2、command的Default Value值應該為可執行程式的安裝路徑。

下面具體介紹在installshield中怎麼寫登錄檔:

1、單擊installshield“Installation Designer”視窗中的“System Configuration”,選擇“Registry”。在開啟的“Destionation computer's Registry view”視窗中右擊HKEY_CLASSES_ROOT根鍵在彈出的快捷選單中選擇“New”/“key”,建立名為“.tpl”的項。

2、在.tpl項上右擊,建立.tpl的default子鍵。在彈出的快捷選單中選擇“New”/“Default Value”,值為“TPLT”

3、用上述同樣的方法,建立.tpl的Content Type子鍵。在彈出的快捷選單中選擇“New”/“String Value”,值為“text/plain”

按照上述相同的方法可建立其他的項和子鍵,不在重述。需要注意的是:command的Default Value應該為TARGETDIR中可執行程式的路徑,可在Installtion Information中的“General Information”下的“Product Properties”查詢。如我這兒的TARGETDIR是:<FOLDER_APPLICATIONS>\<IFX_COMPANY_NAME>\<IFX_PRODUCT_NAME>,但是,我在填寫Default Value時必須在這個路徑上加上“\TPLT.exe”。完整的Default Value為:<FOLDER_APPLICATIONS>\<IFX_COMPANY_NAME>\<IFX_PRODUCT_NAME>\TPLT.exe

HKEY_USERS的註冊檔案為:

[HKEY_USERS\S-1-5-21-908939430-332475525-2491894801-3724\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tpl]
"Progid"="TPLT"
@="TPLT"

[HKEY_USERS\S-1-5-21-908939430-332475525-2491894801-3724\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tpl\OpenWithList]
@=""
"a"="TPLT.exe"
"MRUList"="ab"
"b"="TPLT.vshost.exe"

[HKEY_USERS\S-1-5-21-908939430-332475525-2491894801-3724\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tpl\OpenWithProgids]
"TPLT"=hex(0):

注意:

1、MRUList值項記錄的是所執行程式命令的順序。這裡指先執行a程式“TPLT.exe”,再執行“TPLT.vshost.exe”程式。

2、OpenWithProgids的子鍵“TPLT”應該是Binary Value值hex(0)表示為“0000”的二進位制值(長度為零的二進位制)

修改完成,buid並檢查是否註冊成功。

相關推薦

installshield製作安裝如何在檔案關聯

     最近在學習用installshield製作安裝包,這兩天遇到需要寫登錄檔的問題:通過登錄檔設定檔案關聯,即將一個帶有特殊字尾的檔案連線到一個應用程式上。怎麼在installshield中進行設定呢? 首先我們先來學習一下注冊表,以下內容為轉載 認識登錄檔 一、六大

安裝pywin32無Python3.6安裝路徑解決方法

在安裝pywin32時,出現Python Version 3.6.4 required which was not found in the registry的時候登錄檔中沒有Python3.6.4的安裝路徑。  解決方法: 1.寫一個python檔案,執行即可,在網上找到了登錄檔註冊

Inno setup製作安裝安裝後的路徑

[Registry] Root:HKLM;Subkey:"Software\scas111";Flags:uninsdeletekeyifempty Root:HKLM;Subkey:"Softwa

程式安裝後在生成的安裝資訊解析

轉:https://blog.csdn.net/thanklife/article/details/76566287 程式安裝後在登錄檔中生成的安裝資訊解析 經常碰到程式無法解除安裝, 就老是罵微軟搞的什麼安裝方式,安裝好了不能解除安裝. 後來就打算研究一下windows是如何解除安裝程

批處理檔案新增開機啟動項

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v myauto /t REG_SZ /d C:\1.bat /f /v 新增的鍵名     /t REG_SZ  

W驅開技詳.WDM裝置安裝的變化

ZC:體現:(A) 登錄檔;(B) 裝置管理器 1、硬體子鍵(Hardware)  KEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum   ZC:是否必定在 "\Root"下?   訪問此子鍵必須擁有系統管理員的訪問許可權  "KEY_LOCA

windows系統安裝軟體提示資訊錯誤異常處理方法

案例一:   SQLServer安裝錯誤之------>無法開啟項 UNKNOWN\Components\DA42BC89BF25F5BD0AF18C3B9B1A1EE8\c1c4f01781cc94c4c8fb1542c0981a2a 案例二:   AppScan安裝報錯提示----->無

的程式解除安裝路徑

xp、2003等作業系統的新增刪除程式,應該是通過掃描登錄檔“HKEY\LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\”,見下圖。想

c++獲取程式的安裝路徑

首先, 我們來檢視登錄檔在執行裡面輸入:regedit開啟登錄檔 然後,我們就看到有幾個主鍵 接著,找到。我們今天要測試的註冊的鍵,glireader,這是我自己的程式註冊的鍵,你們可能沒有, 看到旁邊的URL Protocol了嗎,它裡面的值就是這個程式的安裝路徑

安裝numpy,setuptools的時候,不能再識別出來python2.7

安裝numpy裝了很久,遇到一堆問題,這是其中之一 解決方法:  新建一個register.py 檔案,把一下程式碼貼進去,儲存  # # script to register Python 2.0 or later for use with win32all #

C++/MFC 從 讀取串列埠

從登錄檔中 讀取串列埠 CComboBox m_nPortList;//列表 int InitComm() { m_nPortList.ResetContent(); HKEY hKEY; LPCTSTR data_Set=_T("HARDWARE\\DEVICEM

談談組策略在的位置--鉅細講解-大牛程式設計吧

經常使用Windows的使用者都知道組策略和登錄檔,這兩個功能是我們經常使用的,而組策略修改的本質就是在修改登錄檔的鍵值。小編對此收集了一些組策略對應的登錄檔位置詳解。為了方便進行Ctrl+F查詢,這邊就不分頁了,有需要的朋友可以收藏起來,留著備用。 程式設計師程式設計入門聖地--大牛程式設計吧   什麼

COM在的相關鍵值及其意義(這個很詳細,必須轉)

轉自 http://www.cnblogs.com/developersupport/archive/2013/06/02/COM-registry.html COM在登錄檔中的相關鍵值及其意義 概要 當編寫好一個COM並將其在系統中註冊之後,這些登錄檔項到底位於Registe

「C#」刪除的值

using Microsoft.Win32; using System; using System.Collections.Generic; using System.Windows.Forms; namespace reg_AutoStart { s

python2.7無法在被識別:python version 2.7 required,which was no

安裝MySQL-python-1.2.4b4.win32-py2.7的時候,不能再登錄檔中識別出來python2.7 方法:新建一個register.py 檔案,把一下程式碼貼進去,儲存 !E:\python2.7 import sys from _winreg impor

MFC如何將應用程式的配置資訊儲存到(二)

在上一篇中介紹了幾個寫入登錄檔資料和讀取登錄檔資料的介面,並介紹了使用方法。 這一片教你如何使得你的應用程式在下次開啟時保持上一次關閉前的狀態。 在上一篇新增的程式碼的基礎上,要新增WM_CLOSE訊息的響應函式,因為我們只有在視窗關閉前要儲存視窗的位置資訊,所以儲存視窗位

win10 開啟藍 由於其配置資訊(的)不完整或已損壞

在管理員命令提示符下鍵入以下命令:   Dism /Online /Cleanup-Image /ScanHealth   這條命令將掃描全部系統檔案並和官方系統檔案對比,掃描計算機中的不一致情況。   Dism /Online /Cleanup-Image /Che

關於Windows7 64的問題

最近在寫c++程式的時候因為要用到開機啟動 所以就要讀寫登錄檔 RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", NULL, KEY

RegSetValueEx用法

如今修改登錄檔成為繼超頻之後的又一大熱點,許多CFAN通過對登錄檔的修改使Win98顯得更加個性化,諸多報刊雜誌也紛紛扯起登錄檔這面旗幟,令人遺憾的是,在介紹登錄檔修改的眾多的文章中,大都以手工修改為例,極少數文章也只介紹有關修改登錄檔軟體的用法,至於如何在程式中實現卻無人提及。為此我在Visual Stud

oracle配置監聽問題——沒有OracleOraDb11g_home1TNSListener

登錄檔中沒有OracleOraDb11g_home1TNSListener的問題。 這是今天遇到一系列問題的最終根源問題,將這個放在開頭是希望能方便有同樣問題的人方便搜尋到。 下面為解決定位到這個問題以及最終解決這個問題的過程。 之前裝的oracle因為字