1. ホーム
  2. wix

[解決済み] Wixで全ユーザー/マシンごとに非広告のショートカットを作成する方法

2023-06-24 07:19:36

質問

WIX で、allusers profile に広告のないショートカットを作成するにはどうしたらよいでしょうか。 これまでのところ、私は広告付きのショートカットでしかこれを達成することができませんでした。 ショートカットのプロパティに移動して、"find target" を使用することができるので、私は非広告ショートカットを好んでいます。

私が見たチュートリアルでは、ショートカットのキーパスに対してレジストリ値を使用していました。 問題は、ルートとして HKCU を使用していることです。 HKCU が使用され、別のユーザーがプログラムをアンインストールすると (すべてのユーザーに対してインストールされているため)、レジストリ キーが残されます。 HKMUをルートとして使用すると、ICE57エラーが発生しますが、他のユーザーがプログラムをアンインストールすると、キーは削除されます。 HKMU は正しく動作するようですが、私は HKCU を使用する方に押されているようです (ユーザーごと vs すべてのユーザー)。

広告されていないショートカットを作成しようとすると、ICE38、ICE43、または ICE57 などのさまざまな ICE エラーが発生します。 私が見たほとんどの記事は、ICE エラーを無視することを推奨しています。 ICE エラーを発生させずに、非広告のショートカットを作成する方法があるはずです。

動作する例として、サンプル コードを投稿してください。

どのように解決するのですか?

自分の質問に答えるのはエチケットに反するかもしれませんが、申し訳ありません。

最近、偶然に DISABLEADVTSHORTCUTS プロパティ . 私は、広告付きのショートカットでインストールを作成し、DISABLEADVTSHORTCUTS プロパティを 1 に設定して、広告なしのショートカットを生成しました。 これによって ICE43 エラー を回避できます。これは、アドバタイズされたショートカットがキーパスとしてファイルを使用できるためです。 DISABLEADVTSHORTCUTS が設定されているため、Windows Installer はこれらのアドバタイズされたショートカットを通常のショートカットに置き換えます。

私は パッケージ要素の InstallScope 属性を "perMachine" に設定しました。 これにより、ALLUSERS プロパティが 1 に設定されます。 ProgramMenuFolder デスクトップ フォルダー は、All Users プロファイルに解決されます。

ProgramMenuFolder の下に作成されたフォルダーについては、RemoveFolder と RegistryValue 要素があります。 私が見た例では ( ex1 , ex2 ) は、レジストリ値のルートとして HKCU を使用します。 このルートを HKMU に変更しました。これは、ALLUSERS の値に応じて HKCU または HKLM に解決されます。

要するに、DISABLEADVTSHORTCUTS を 1 に設定すると、アドバタイズされたショートカットは ICE エラーを生成しませんが、インストール時にアドバタイズされないショートカットに変換されるということです。 ルート HKMU を持つレジストリ値は、非広告ショートカットのキーパスでない限り、キーパスとして問題ありません。

<?xml version="1.0" encoding="utf-8"?>
<!-- This example is based on SampleFirst by Gábor DEÁK JAHN, Tramontána:
        http://www.tramontana.co.hu/wix/lesson1.php#1.3
    Original SampleFirst:
        http://www.tramontana.co.hu/wix/download.php?file=samples/samplefirst.zip&type=application/zip -->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Name="Foobar 1.0" Id="YOURGUID-21F1-4026-ABD2-7CC7F8CE4D18" UpgradeCode="YOURGUID-AFA4-46C6-94AA-EEE3D104F903" Language="1033" Codepage="1252" Version="1.0.0" Manufacturer="Acme Ltd.">
        <Package Id="*" Keywords="Installer" Description="Acme's Foobar 1.0 Installer" Comments="Foobar is a registered trademark of Acme Ltd." Manufacturer="Acme Ltd." InstallerVersion="100" Languages="1033" Compressed="yes" SummaryCodepage="1252" InstallScope="perMachine" />
        <Media Id="1" Cabinet="Sample.cab" EmbedCab="yes" DiskPrompt="CD-ROM #1" />
        <Property Id="DiskPrompt" Value="Acme's Foobar 1.0 Installation [1]" />
        <Property Id="DISABLEADVTSHORTCUTS" Value="1" />
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder" Name="PFiles">
                <Directory Id="Acme" Name="Acme">
                    <Directory Id="INSTALLDIR" Name="Foobar 1.0">
                        <Component Id="MainExecutable" Guid="YOURGUID-3E4F-47A2-86F1-F3162E9C4798">
                            <File Id="FoobarEXE" Name="FoobarAppl10.exe" DiskId="1" Source="FoobarAppl10.exe" KeyPath="yes">
                                <Shortcut Id="startmenuFoobar10" Directory="ProgramMenuDir" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
                                <Shortcut Id="desktopFoobar10" Directory="DesktopFolder" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
                            </File>
                        </Component>
                        <Component Id="HelperLibrary" Guid="YOURGUID-C7DA-4C02-A2F0-A6E089FC0CF3">
                            <File Id="HelperDLL" Name="Helper.dll" DiskId="1" Source="Helper.dll" KeyPath="yes" />
                        </Component>
                        <Component Id="Manual" Guid="YOURGUID-FF92-4BF4-A322-819A3B2265A0">
                            <File Id="Manual" Name="Manual.pdf" DiskId="1" Source="Manual.pdf" KeyPath="yes">
                                <Shortcut Id="startmenuManual" Directory="ProgramMenuDir" Name="Instruction Manual" Advertise="yes" />
                            </File>
                        </Component>
                    </Directory>
                </Directory>
            </Directory>
            <Directory Id="ProgramMenuFolder" Name="Programs">
                <Directory Id="ProgramMenuDir" Name="Foobar 1.0">
                    <Component Id="ProgramMenuDir" Guid="YOURGUID-D1C2-4D76-BA46-C6FA79862E77">
                        <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
                        <RegistryValue Root="HKMU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes" />
                    </Component>
                </Directory>
            </Directory>
            <Directory Id="DesktopFolder" Name="Desktop" />
        </Directory>
        <Feature Id="Complete" Level="1">
            <ComponentRef Id="MainExecutable" />
            <ComponentRef Id="HelperLibrary" />
            <ComponentRef Id="Manual" />
            <ComponentRef Id="ProgramMenuDir" />
        </Feature>
        <Icon Id="Foobar10.exe" SourceFile="FoobarAppl10.exe" />
    </Product>
</Wix>