0

.NET アプリケーション用の Windows インストーラーを作成していますが、InstallShield (2012 Spring - Premier Edition) がWindows Common-Controlsマニフェストをアイコンに追加して、アイコンを DLL に変換しているようです。

これは、OS が起動時にアイコン イメージを解析しようとするときにページ フォールトが発生するため、アプリケーションのパフォーマンスに影響を与えています。

IS が追加しているマニフェストを次に示します。

<?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"
    processorArchitecture="X86"
    name="CompanyName.ProductName.YourApplication"
    type="win32"
/>
<description>InstallShield Icon Res</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="<>"
            language="*"
        />
    </dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel
                level="asInvoker"
                uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
</assembly>
4

1 に答える 1

1

まず、なぜこれが起こっているのかについて簡単に説明します。Windows インストーラー アドバタイズメントをサポートするためにアイコンを格納する必要があるアイコン テーブルでは、「ショートカットに関連付けられているアイコン ファイルは EXE バイナリ形式である必要があり、拡張子がターゲットの拡張子と一致するように名前を付ける必要があります」したがって、InstallShield は正しい形式のファイルを構築します。そして、「ビルド」とは、テンプレート EXE ファイルのリソースにアイコン データを詰め込むことを意味します。

それで、結果は何ですか?テンプレートを編集して、結果のマニフェストを変更できます。テンプレートは に保存されており...\Support\_IsIcoRes.exe、それを Visual Studio または別のリソース エディターで開くと、 でマニフェストを調べたり、編集したりすることもできますRT_MANIFEST (24) \ 1。このファイルは (まだ) 署名されていません。ビルド プロセスで変更する必要があり、署名が無効になるため、編集は安全なはずです。とはいえ、万一の事態に備えて、オリジナルのバックアップを取っておくことをお勧めします。

于 2015-02-21T14:32:25.857 に答える