この記事では、前回作成したOfficeアドインを共有フォルダからサイドロードする方法と、その設定をInno Setupで自動化する方法をまとめています。
前回内容⇒【Officeアドイン編】エクセルでローカルLLM翻訳
エクセルのOfficeアドインをサイドロードする
Windows11
VSCode
Excel2024
InnoSetup ver6.4.2
フォルダからサイドロード
Officeストアに公開するのは大変なので、ネットワーク共有からテストするための Office アドインをサイドロードするを参考にしました。
- 任意の場所にフォルダを作成
デスクトップなどにフォルダを作り、公式手順に従って「共有フォルダカタログ」として設定します。 - manifest.xml を配置
前回記事プロジェクトをビルド後、distフォルダに出力されるmanifest.xmlを共有フォルダにコピーします - Excel からアドインを追加
Excel → 挿入 → アドイン → 共有フォルダ に表示されるので追加できます。
注意点
- フォルダパスが長すぎたり、日本語が含まれていると不具合の起きることがあります
⇒追加はできるけど、エクセルを再起動すると追加したはずのアドインが削除されている状態になるということがありました
英数字で短いパスの場所を推奨
Inno Setupでの配布と自動登録
Inno Setupを使うことで、以下内容を自動化できます。
- manifest.xml の配布
- Office の「信頼されているアドインカタログ」へのレジストリ登録
- 共有フォルダのURL(UNC パス)を自動設定
- アドインはHTTPSでホストされている必要があります
今回はGitHub Pagesにホストを利用しています。
Inno Setupの概要
各セクションごとに概要を説明します。
Setupセクション
AppId={{GUID-1}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={userdocs}\OfficeAddIns\Excel{#MyAppName}
PrivilegesRequired=none
- AppId
アプリ固有のGUIDを入れる
PowerShellで生成:New-Guid - DefaultDirName
インストール先のパス
{userdocs}:「ユーザードキュメント配下」に配置 - PrivilegesRequired
none:管理者権限なしでインストール可能
(レジストリはHKCUのため問題なし)
Files セクション
Source: "{#MyAppPath}{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
- manifest.xml をインストール先にコピー
- Flags: ignoreversion
xmlはバージョン情報が無いので比較せずにコピー
Registryセクション
[Registry]
Root: HKCU; Subkey: "Software\Microsoft\Office\16.0\WEF\TrustedCatalogs\{{GUID-2}}"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Microsoft\Office\16.0\WEF\TrustedCatalogs\{{GUID-2}}"; ValueType: string; ValueName: "Id"; ValueData: "{{GUID-2}}"
Root: HKCU; Subkey: "Software\Microsoft\Office\16.0\WEF\TrustedCatalogs\{{GUID-2}}"; ValueType: string; ValueName: "Url"; ValueData: "\\\\{computername}\\Users\\{username}\\Documents\\OfficeAddIns\\Excel\\LocalTranslatorForExcel"
Root: HKCU; Subkey: "Software\Microsoft\Office\16.0\WEF\TrustedCatalogs\{{GUID-2}}"; ValueType: dword; ValueName: "Flags"; ValueData: 1
Officeアドインは「TrustedCatalogs/信頼されたアドインカタログ」でレジストリ管理されています。
- Id
カタログのGUID
⇒Officeアドイン用GUIDのため、AppIdで設定したGUIDとは別にします
AppIdとTrustedCatalogsのGUIDは必ず別にします
AppIdはアプリ識別用
TrustedCatalogsのGUIDはカタログ識別用
- Url
共有フォルダのUNCパス
⇒マイドキュメント内のフォルダを指定する場合はこのようになります
{computername}は実際のPC名に置き換え
{username}はログインユーザー名に置き換え
これらを使うことで、Inno Setupの実行ユーザーが変わるとパスも変わります
\\\\pcコンピューター名\\共有名(c:\Users)\\ユーザー名\\Documents\\OfficeAddIns\\Excel\\LocalTranslatorForExcel
↓
\\\\{computername}\\Users\\{username}\\Documents\\OfficeAddIns\\Excel\\LocalTranslatorForExcel
- Flags
共有フォルダの場合は「1」
その他セクション
今回、Tasks,Icons,Runなどは不要なため省略しています。
アンインストール
アプリ一覧からこのインストーラーで追加したアプリをアンインストールすればレジストリが削除され、エクセルのアドインへ表示されなくなります。
シーケンス図
インストーラーの流れはこのようになります。
Inno Setupのコード全体
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "LocalTranslatorForExcel"
#define MyAppVersion "1.0.0.0"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "https://www.example.com/"
#define MyAppExeName "manifest.xml"
#define MyAppAssocName MyAppName + " File"
#define MyAppAssocExt ".myp"
#define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt
; パスは""ではなく''で囲む
#define MyAppPath 'C:\Users\ExcelAddIns\LocalTranslatorForExcel\dist\'
; #define MyAppVersion GetVersionNumbersString(MyAppPath + MyAppExeName)
[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{GUID-1}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
; AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
; プログラムフォルダ
; DefaultDirName={autopf}\{#MyAppName}
; マイドキュメント
DefaultDirName={userdocs}\OfficeAddIns\Excel\{#MyAppName}
UninstallDisplayIcon={app}\{#MyAppExeName}
; "ArchitecturesAllowed=x64compatible" specifies that Setup cannot run
; on anything but x64 and Windows 11 on Arm.
ArchitecturesAllowed=x64compatible
; "ArchitecturesInstallIn64BitMode=x64compatible" requests that the
; install be done in "64-bit mode" on x64 or Windows 11 on Arm,
; meaning it should use the native 64-bit Program Files directory and
; the 64-bit view of the registry.
ArchitecturesInstallIn64BitMode=x64compatible
ChangesAssociations=yes
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only).
PrivilegesRequired=none
OutputDir=.
OutputBaseFilename=LocalTranslatorForExcelSetup
; SetupIconFile={#MyAppPath}logo.ico
SolidCompression=yes
VersionInfoVersion={#MyAppVersion}
WizardStyle=modern
; 始めの画面にメッセージをだす
; InfoBeforeFile=InfoBefore.txt
[Languages]
Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
[Files]
; xmlを配布
Source: "{#MyAppPath}{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
; フォルダをまとめて指定する場合
; Source: "{#MyAppPath}*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
; 参考 https://learn.microsoft.com/ja-jp/office/dev/add-ins/testing/create-a-network-shared-folder-catalog-for-task-pane-and-content-add-ins
; レジストリのGUIDとinno setup(AppId)でのGUIDは別。
[Registry]
Root: HKCU; Subkey: "Software\Microsoft\Office\16.0\WEF\TrustedCatalogs\{{GUID-2}}"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Microsoft\Office\16.0\WEF\TrustedCatalogs\{{GUID-2}}"; ValueType: string; ValueName: "Id"; ValueData: "{{GUID-2}}"
Root: HKCU; Subkey: "Software\Microsoft\Office\16.0\WEF\TrustedCatalogs\{{GUID-2}}"; ValueType: string; ValueName: "Url"; ValueData: "\\\\{computername}\\Users\\{username}\\Documents\\OfficeAddIns\\Excel\\LocalTranslatorForExcel"
Root: HKCU; Subkey: "Software\Microsoft\Office\16.0\WEF\TrustedCatalogs\{{GUID-2}}"; ValueType: dword; ValueName: "Flags"; ValueData: 1
