私はデスクトップアプリケーションとBHOプラグイン がクラスライブラリプロジェクトとして作成されたVS 2008でインストーラを作成しています。 手作業で、このコマンド[regasm/codebase "myPlugin.dll" register]を使用してmyPlugin.dllを登録できますが、セットアッププロジェクトでこれを実現する方法はわかりません。Visual Studio 2008を使用して.dllファイルを展開する方法は?
答えて
これを行う最も簡単で安全な方法は、登録するDLLの名前を受け入れる独自のインストーラクラスを作成し、RegistrationServicesを使用してdllをインストールまたはアンインストールすることです。
Installerを作成すると、カスタムアクションのCustomActionDataプロパティを使用して、カスタムアクションのパラメータを受け入れることができます。これらの各パラメータは、Installer.Context.Parametersコレクションに格納されます。つまり、いくつかのインストーラープロパティを使用することで、完全にインストールされたパスをDLLに渡すことができ、RegistrationServicesがRegasmと同じアクションを実行するために使用できます。この実装
は多段階プロセスである:
ステップ1インストーラクラスを作成することです。これは再利用可能なコードなので、このクラスを保持する別のDLLプロジェクトを作成することをお勧めします。
using System;
using System.Text;
using System.ComponentModel;
using System.Configuration.Install;
using System.Collections;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
[RunInstaller(true)]
public partial class AssemblyRegistrationInstaller : Installer
{
public AssemblyRegistrationInstaller()
{
}
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
RegisterAssembly(true);
}
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
RegisterAssembly(false);
}
public override void Uninstall(IDictionary savedState)
{
base.Rollback(savedState);
RegisterAssembly(false);
}
private void RegisterAssembly(bool fDoRegistration)
{
string sAssemblyFileName = base.Context.Parameters["AssemblyFileName"];
if (string.IsNullOrEmpty(sAssemblyFileName))
{
throw new InstallException("AssemblyFileName must be specified");
}
if (!File.Exists(sAssemblyFileName))
{
if (fDoRegistration)
{
throw new InstallException(string.Format("AssemblyFileName {0} is missing", sAssemblyFileName));
}
else
{
// Just bail if we are uninstalling and the file doesn't exist
return;
}
}
var oServices = new RegistrationServices();
var oAssembly = Assembly.LoadFrom(sAssemblyFileName);
if (fDoRegistration)
{
oServices.RegisterAssembly(oAssembly, AssemblyRegistrationFlags.SetCodeBase);
}
else
{
try
{
oServices.UnregisterAssembly(oAssembly);
}
catch
{
// Just eat the exception so that uninstall succeeds even if there is an error
}
}
}
}
ステップ2は、セットアッププロジェクトに新しいDLLを追加することです。 DLLの設定を行う必要があるので、プロジェクト自体を追加しないでください。 DLLをプロジェクトのリリースディレクトリから直接追加します。
ステップ3では、新しいDLLをカスタムアクションとして追加します。これを行うには、セットアッププロジェクトを右クリックし、View
、次にCustom Actions
を選択します。
メニューのCustom Actions
を右クリックし、ポップアップダイアログで新しいインストーラDLLを選択します。これにより、自動的に4つのセクションすべてにDLLが追加されます。 Commit
セクションに追加されたものを右クリックして削除します。他の3つのセクションのそれぞれについて
、次の操作を実行します。
DLLのエントリを右クリックし、Properties Window
を選択します。
プロパティグリッドのInstallerClass
エントリがtrueに設定されていることを確認してください。あなたが追加することができますどこ
/AssemblyFileName="[TARGETDIR]\myplugin.dll"
Slightyより良い解決策はHow to register a .NET CCW with regasm from a Visual Studio 2008 Setup project
である:
は、カスタムインストーラクラスに登録するDLLの名前を渡すCustomActionData
プロパティに次のエントリを追加します。インストーラクラスはdllではありません
- 1. Visual Studioデプロイメントプロダクトを使用してフォルダを展開する方法
- 2. Visual Studio 2008を使用したスマートデバイスへの展開
- 3. Visual Studioパッケージを展開する方法
- 4. Visual Studioでアドインライブラリを使用してF5を展開する方法は?
- 5. Visual Studio 2008の展開プロジェクトの問題?
- 6. のVisual Studio 2008のデータベースプロジェクトの展開ベースライン
- 7. Visual Studio 2008 C#展開変数
- 8. Visual Studio:ソリューションを展開して開発を続ける方法
- 9. Visual Studioを使用してOffice VSTOアドインを展開する方法2017
- 10. Visual Studio 2008でチームエクスプローラを開く方法
- 11. のVisual Studio 2008のDLL(envdte.dll)
- 12. のVisual Studio - .exeファイルは、すべての使用dllファイルをインストール
- 13. Visual Studio 2008を使用してWindows Mobile 6.53で動作するDLLに接続する方法は?
- 14. Visual Studio 2008を使用してNPAPIプラグインのソースコードをコンパイルする方法は?
- 15. rdlを開く方法Visual Studio 2005、Visual Studio 2008で作成しましたか?
- 16. Visual Studio 2008の新しいウィンドウでドキュメントを開く方法は?
- 17. Visual Studio 2010を使用してサイトを公開する方法
- 18. Visual StudioでDataGridViewの行を展開する方法は?
- 19. Visual C#2008 Expressの展開
- 20. Visual Studio 2008でvcxproj(Visual C++プロジェクト)を開く方法
- 21. Azureのは、私がWebJobにVisual Studioを使用提案方法を展開WebJob
- 22. Visual Studio 2008 - 2つのプロジェクトをデバイスに展開
- 23. C++とVisual Studio 2008でasmコードを使用する方法
- 24. Visual Studio 2008/Visual C++ 2008 Expressを使用したCの学習
- 25. Visual Studio 2008でjsoncppを使用する
- 26. Visual Studio 2008を再インストールせずにビジネスインテリジェンスをインストールして使用する方法
- 27. vb.net(スマートデバイス)を使用してVisual Studio 2008にsqlデータベースコンパクトエディションを接続する方法
- 28. Visual Studio 2008を使用して.netモジュールを生成する方法
- 29. Mac用Visual Studioを使用してasp.netコアWebサイトまたはコンソールアプリケーションを展開
- 30. Visual Studio C++でDLLを使用する