2010-07-02 47 views
3

我們有一個VB6項目,編譯爲一個ActiveX EXE,它恰好在文件名中包含「補丁」這個詞(它是警察調度系統的一部分),這導致Windows 7上的Installer Detection認爲它需要提升。可以使用資源編輯器將清單資源添加到VB6項目中嗎?

我不想重命名EXE,而是將清單資源嵌入編譯後的EXE中,該EXE將請求asInvoker權限級別。從閱讀中,我知道在使用Windows SDK中的mt工具編譯EXE後我可以這樣做,但我更願意將清單放在.RES文件中,以便在構建項目時將其編譯到程序中。

是否有一種方法可以使用資源編輯器加載項將清單資源(資源類型24)添加到VB6項目中?我將清單文件添加爲自定義資源,併爲資源類型嘗試了一些不同的值,例如「RT_MANIFEST」和「24」,然後通過使用mt重新提取清單來測試它是否工作正常,但我無法讓它工作。

注意:正如我訪問過的幾頁中所提到的,我確實記得使清單是4個字節的倍數,所以我不認爲這是問題。

+0

有趣的問題。我們在Vista上遇到過幾個exes問題,並通過重命名exes或更改項目設置中的某些屬性來解決此問題。 – MarkJ 2010-07-02 16:39:07

+0

重命名是最簡單的解決方案,但我不想更改安裝程序以刪除舊文件並添加新重命名的文件,因爲我們有許多不同的安裝程序來安裝該特定文件。此外,嵌入它會更好,因此Windows 7上的開發人員無需執行任何操作即可使其在機器上工作。另外知道如何添加任何類型的資源可能對其他事情有用,所以我想我會試着弄清楚如何通過一個清單資源做到這一點。很高興知道這確實很容易做到。 – 2010-07-02 16:48:11

回答

4

起初,我想我會嘗試使用rc創建一個.RES文件,我可以將其添加到我的項目中。我之前從未使用過rc,所以我在試圖弄清楚的時候最終得到了這個MSDN page

什麼是有趣的是這樣描述的typeNameId該網頁上(強調):

鍵入名稱或標識的 資源。指定一個字符串名稱或一個 數字。 如果使用數字,請在 字符串前面加上「#」,表示它 代表的數字爲。每個資源類型 元素必須只有一個typeNameId 屬性。

我心想:「好吧,這很有趣,可能不適用於VB6的資源編輯器,但我會嘗試它。」

如果您將清單文件添加爲自定義資源,然後將其類型更改爲#24(即使用前綴#),那麼它可以工作!它被正確地嵌入到已編譯的EXE中作爲清單資源。

以下是詳細步驟:

1)創建一個清單文件。我用這一個(請注意,在端部的填充取得的文件中的我的情況下精確地608字節):

 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity version="1.0.0.0" name="DispatchMonitor" type="win32"/> 
    <description>DispatchMonitor RunAsInvoker fix</description> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
     <security> 
      <requestedPrivileges> 
       <requestedExecutionLevel level="asInvoker" uiAccess="false"/> 
      </requestedPrivileges> 
     </security> 
    </trustInfo> 
</assembly> 
<!-- Padding to make filesize even multiple of 4 --> 

2)通過從選擇資源編輯器打開資源編輯器在VB6 IDE 工具菜單(您可能必須先啓用它,才能在加載項>加載項管理器)。

3)如果需要,創建一個新的資源文件。

4)添加一個新的自定義資源(點擊「?」圖標左側的按鈕)。

5)出現一個文件選擇對話框中:選擇)在步驟1中

6中創建的清單文件的資源將一個「自定義」文件夾下加入由默認的101 ID。

7)雙擊新資源。將「類型」更改爲#24,將「Id」更改爲1.

8)保存更改並關閉資源編輯器

+0

不,「#24」不是「RT_MANIFEST」資源類型。通常我創建並附加一個空的.res文件並關閉VB項目,然後啓動VC並編輯.res文件以插入清單。這樣,最終的exe自動獲取嵌入式清單。此外,事實證明,VB6資源編輯器可以枚舉任何類型的.res文件中的項目(包括'RT_MANIFEST'),但無法查看其內容。 – wqw 2010-07-03 08:12:04

+0

@wqw:「#24」確實有效。 'RT_MANIFEST'是一個等於'24'的常量。試試看。我確認它通過運行'mt'來查看它是否可以將資源識別爲清單並將其解壓縮到文件中:'mt.exe -inputresource:MyExe.exe;#1 -out:extracted.manifest'。這個命令不適用於任何其他資源類型,但是當我使用資源類型「#24」完成時,'mt'能夠從編譯後的EXE中提取清單。另外,我將程序安裝在Windows 7機器上,操作系統能夠讀取清單,因爲它從EXE的圖標中刪除了屏蔽。 – 2010-07-05 00:07:47

+0

此外,在我以我在文章中描述的方式嵌入清單後,該程序不再生成「需要提升」錯誤,所以我100%肯定上述步驟的工作。 – 2010-07-05 00:10:11

相關問題