DoboWiki
Top
> .NETプログラミング研究/62 をテンプレートにして作成
.NETプログラミング研究/62 をテンプレートにして作成
開始行:
#title(.NETプログラミング研究 第62号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第62号 [#j661de8b]
**.NET Tips [#t736d4df]
***MSIファイルのWindows Installerデータベースをプログラム...
#column(注意){{
この記事の最新版は「[[MSIファイルのWindows Installerデー...
}}
今まで紹介したデプロイメントプロジェクトのTipの幾つかは、...
実はそのサンプルがPlatform SDKにあります。Scriptsフォルダ...
-[[Windows Installer Scripting Examples>http://msdn.micro...
この内、「WiRunSQL.vbs」はSQLクエリーによりWindows Instal...
-[[Execute SQL Statements>http://msdn.microsoft.com/libra...
まずはWiRunSQL.vbsを使うことによりMSIファイルのデータベー...
cscript WiRunSQL.vbs <MSIファイル名> "INSERT INTO Propert...
前号にて、「すべてのユーザー/このユーザーのみ」チェックボ...
-[[Re: Using VS.NET 2003 to build a Setup project for ALL...
なおこの例ではWiRunSQL.vbsを何回も呼び出していますが、WiR...
次に「WiRunSQL.vbs」を参考にして、自分でスクリプトを書い...
#code(vbscript){{
Option Explicit
Const msiOpenDatabaseModeTransact = 1
Dim msiPath : msiPath = Wscript.Arguments(0)
Dim installer
Set installer = Wscript.CreateObject("WindowsInstaller.In...
Dim database
Set database = installer.OpenDatabase(msiPath, msiOpenDat...
Dim query
query = "INSERT INTO Property(Property, Value) VALUES('AL...
Dim view
Set view = database.OpenView(query)
view.Execute
database.Commit
}}
もう一つサンプルを示します。この例では、Propertyテーブル...
#code(vbscript){{
Option Explicit
Const msiOpenDatabaseModeTransact = 1
Const msiViewModifyInsert = 1
Const msiViewModifyUpdate = 2
Dim msiPath : msiPath = Wscript.Arguments(0)
Dim installer
Set installer = Wscript.CreateObject("WindowsInstaller.In...
Dim database
Set database = installer.OpenDatabase(msiPath, msiOpenDat...
Dim query
query = "Select * FROM Property WHERE Property='ALLUSERS'"
Dim view
Set view = database.OpenView(query)
view.Execute
Dim record
Set record = view.Fetch
Dim viewModify
viewModify = msiViewModifyUpdate
'ALLUSERSがない時
If record Is Nothing Then
Set record = installer.CreateRecord(2)
viewModify = msiViewModifyInsert
End If
record.StringData(1) = "ALLUSERS"
record.StringData(2) = "2"
view.Modify viewModify, record
database.Commit
}}
さて、これと同じことをVB.NETやC#で行うには、どのようにす...
まずはじめに考えられる方法は、上と同様にCOMを使う方法でし...
または、Windows Installer APIを直接呼び出してもよいでしょ...
-[[Windows Installer Reference>http://msdn.microsoft.com/...
Windows Installer APIのラッパークラスがCode Projectで紹介...
-[[Wrapping the Windows Installer 2.0 API>http://www.code...
また、WiXに同梱されているwix.dllも役に立ちます。
-[[Windows Installer XML (WiX) toolset>http://sourceforge...
***他のサイトで紹介されているWindows Installerに関する役...
これまでこのメールマガジンでは8回に分けてデプロイメントプ...
***「プログラムの追加と削除」に表示しない [#n556d229]
#column(注意){{
この記事の最新版は「[[「プログラムの追加と削除」に表示し...
}}
ARPSYSTEMCOMPONENTプロパティを1にします。Windows 2000より...
-[[Frequently Asked Questions About Windows Installer>htt...
***OrcaでMSIファイルを編集後ファイルのサイズが増える [#z7...
#column(注意){{
この記事の最新版は「[[OrcaでMSIファイルを編集後ファイルの...
}}
OrcaでMSIファイルを編集し保存すると、MSIファイルのサイズ...
-[[Frequently Asked Questions About Windows Installer>htt...
***アンインストールするためのショートカットを作成する [#e...
#column(注意){{
この記事の最新版は「[[アンインストールするためのショート...
}}
リンク先が「[SystemFolder]\msiexec.exe」で、コマンドライ...
-[[How do I create a shortcut to my uninstaller?>http://w...
***複数のバージョンの同じコンポーネントをインストールする...
#column(注意){{
この記事の最新版は「[[複数のバージョンの同じコンポーネン...
}}
次のページをどうぞ。
-[[Support for Multiple Versions of the Same Component wi...
***パッチファイルを作成する [#ic83d259]
#column(注意){{
この記事の最新版は「[[パッチファイルを作成する>https://do...
}}
VS.NETのデプロイメントプロジェクトを使ってMSIファイルを作...
-[[How to create installation patches for VS.NET deployme...
***MSIファイル内のファイルを抽出する [#mdc094ce]
#column(注意){{
この記事の最新版は「[[MSIファイル内のファイルを抽出する>h...
}}
下で紹介するツールを使うことにより、MSIファイル内のファイ...
-[[Less MSIerables: A tool to Extract the contents of an ...
デプロイメントプロジェクトによる配布は、Windows Installer...
幸いにして.NETアプリケーションはXCOPYによる配置が可能です...
ここからはこのようにWindows Installer以外のインストーラを...
***Windows Installer以外のインストーラでWindowsサービスア...
#column(注意){{
この記事の最新版は「[[Windows Installer以外のインストーラ...
}}
VS.NETとデプロイメントプロジェクトを使用した場合、作成し...
-[[チュートリアル : コンポーネント デザイナによる Windows...
-[[サービス アプリケーションへのインストーラの追加>http:/...
-[[サービスのインストールとアンインストール>http://www.mi...
この方法によると、「インストーラの追加」リンクをクリック...
さて、Installerクラスによるカスタム動作がどのように行われ...
-[[インストーラ ツール (Installutil.exe)>http://www.micro...
以上をまとめると、次のような方法でサービスのインストール...
まずサービスのプロジェクトにProjectInstallerクラスを追加...
InstallUtil.exe (サービスのEXEファイルのパス)
を、アンインストール時に
InstallUtil.exe /u (サービスのEXEファイルのパス)
を実行すればよいということになります。(つまり、インスト...
ここで新たな問題が発生します。InstallUtil.exeはどこにある...
そこでここでは、InstallUtil.exeは共通言語ランタイムがイン...
共通言語ランタイムがインストールされているディレクトリの...
(Windowsディレクトリ)\Microsoft.NET\Framework\v1.1.4322
であると決め付けたり、レジストリキー
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
の「sdkInstallRootv1.1」の値を調べて知ることができます。...
ここでは、InstallUtil.exeを起動させるために次のようなプロ...
#code(csharp){{
public class InstallUtil
{
private static void Main(string[] args)
{
if (args.Length == 0)
{
ShowError("引数が不正です。");
return;
}
//installutil.exeのフルパスを取得
string installutilPath =
System.IO.Path.Combine(
System.Runtime.InteropServices.RuntimeEnviron...
"installutil.exe");
if (!System.IO.File.Exists(installutilPath))
{
ShowError("installutil.exeが見つかりませんで...
return;
}
//installutil.exeに渡すコマンドラインを作成
string installutilArg = "";
foreach (string arg in args)
{
installutilArg += " " +
(arg.IndexOf(" ") > -1 ? "\"" + arg + "\"...
}
//installutil.exeを起動
System.Diagnostics.Process p;
try
{
p = System.Diagnostics.Process.Start(
installutilPath, installutilArg);
p.WaitForExit();
}
catch
{
ShowError("installutil.exeの起動に失敗しまし...
return;
}
if (p.ExitCode != 0)
{
ShowError("installutil.exeがエラーコード(" +
p.ExitCode.ToString() + ")を返しました。");
return;
}
System.Environment.ExitCode = 0;
}
private static void ShowError(string msg)
{
System.Windows.Forms.MessageBox.Show(
null,
msg + "\nサービスのインストール/アンインスト...
"エラー",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Error);
System.Environment.ExitCode = 1;
}
}
}}
この「instsrv.exe」をInstallUtil.exeと同じコマンドライン...
instsrv.exe (サービスのEXEファイルのパス)
を、アンインストール時に
instsrv.exe /u (サービスのEXEファイルのパス)
を実行すればサービスがインストール・アンインストールされ...
具体例をひとつ示しましょう。ここでは「Inno Setup」を使い...
-[[Inno Setup>http://www.jrsoftware.org/isinfo.php]]
まず[Files]セクションを次のようにします(パスなどは適当に...
#prescroll(wrap=true){{
[Files]
Source: "C:\WindowsService1.exe"; DestDir: "{app}"
Source: "C:\instsrv.exe"; DestDir: "{app}"
}}
次にインストール時とアンインストール時にinstsrv.exeを起動...
#prescroll(wrap=true){{
[Run]
Filename: "{app}\instsrv.exe"; Parameters: "/LogFile= ""{...
[UninstallRun]
Filename: "{app}\instsrv.exe"; Parameters: "/u /LogFile= ...
}}
これでサービスのインストールとアンインストールが行われる...
補足1:このようにinstallutil.exeではなく、Win32 APIを使っ...
-[[Installing a Service Programmatically>http://www.c-sha...
補足2:Inno SetupのPascal scriptingを使ってサービスをイン...
-[[ISX Knowledge Base - Functions to Start, Stop, Install...
***グローバルアセンブリキャッシュにアセンブリをインストー...
#column(注意){{
この記事の最新版は「[[グローバルアセンブリキャッシュにア...
}}
ヘルプの「グローバル アセンブリ キャッシュ」によると、ア...
-[[グローバル アセンブリ キャッシュ>http://www.microsoft....
その3つの方法とは、次の通りです。
+Windows Installerを使ってインストールする
+グローバルアセンブリキャッシュツール(Gacutil.exe)を使う
+WindowsエクスプローラのWindows\assemblyディレクトリにア...
注:WindowsエクスプローラのWindows\assemblyディレクトリの...
-[[アセンブリ キャッシュ ビューア (Shfusion.dll)>http://w...
インストーラを使ってこれを実現するとなると当然Windowsエク...
-[[グローバル アセンブリ キャッシュ ツール (Gacutil.exe)>...
注意:ヘルプの「グローバル アセンブリ キャッシュ」にある...
Gacutil.exeを使ってGACにアセンブリをインストールするには...
Gacutil.exe /i (アセンブリのパス)
とし、アンインストールするには
Gacutil.exe /u (アセンブリ名)
とします。(注)
注:このようなアセンブリ名を指定してアンインストールする...
-[[アセンブリ名>http://www.microsoft.com/japan/msdn/libra...
ヘルプによると、実際の製品のインストールにGacutil.exeを使...
具体例を示しましょう。ここではOPAQUEを使用します。次のよ...
Gacutil.exe /ir (アセンブリのパス) OPAQUE "MyApplicati...
アンインストールするには、次のようにします。
Gacutil.exe /ur (アセンブリ名) OPAQUE "MyApplication1"...
Gacutil.exeの使い方は理解できたものとし、次に進みましょう...
さて、実はGacutil.exeを使う以外にも方法があります。.NET F...
以下にGacInstall、GacRemoveメソッドを使ってGACにアセンブ...
#code(csharp){{
public class GacInst
{
private static void Main(string[] args)
{
if (args.Length == 0)
{
ShowError("引数が不正です。");
return;
}
System.EnterpriseServices.Internal.Publish pub =
new System.EnterpriseServices.Internal.Publis...
if (args[0] == "/i")
{
try
{
//GACにインストール
pub.GacInstall(args[1]);
}
catch
{
ShowError("GACへのインストールに失敗しま...
return;
}
}
else if (args[0] == "/u")
{
try
{
//GACからアンインストール
pub.GacRemove(args[1]);
}
catch
{
ShowError("GACからのアンインストールに失...
return;
}
}
else
{
ShowError("引数が不正です。");
return;
}
System.Environment.ExitCode = 0;
}
private static void ShowError(string msg)
{
System.Windows.Forms.MessageBox.Show(
null,
msg + "\nGACへのインストール/アンインストール...
"エラー",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Error);
System.Environment.ExitCode = 1;
}
}
}}
このプログラム(「gacinst.exe」とする)の使用法を示します...
gacinst.exe /i (アセンブリファイルのフルパス)
またオプション/uでアンインストールします。このとき、アセ...
gacinst.exe /u (アセンブリファイルのフルパス)
参考:
-[[Visual Basic .NET のグローバル アセンブリ キャッシュに...
-[[Demystifying the .NET Global Assembly Cache>http://www...
**コメント [#ce2b2e64]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2005-11-04 (金) 18:00:00,DOB...
終了行:
#title(.NETプログラミング研究 第62号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第62号 [#j661de8b]
**.NET Tips [#t736d4df]
***MSIファイルのWindows Installerデータベースをプログラム...
#column(注意){{
この記事の最新版は「[[MSIファイルのWindows Installerデー...
}}
今まで紹介したデプロイメントプロジェクトのTipの幾つかは、...
実はそのサンプルがPlatform SDKにあります。Scriptsフォルダ...
-[[Windows Installer Scripting Examples>http://msdn.micro...
この内、「WiRunSQL.vbs」はSQLクエリーによりWindows Instal...
-[[Execute SQL Statements>http://msdn.microsoft.com/libra...
まずはWiRunSQL.vbsを使うことによりMSIファイルのデータベー...
cscript WiRunSQL.vbs <MSIファイル名> "INSERT INTO Propert...
前号にて、「すべてのユーザー/このユーザーのみ」チェックボ...
-[[Re: Using VS.NET 2003 to build a Setup project for ALL...
なおこの例ではWiRunSQL.vbsを何回も呼び出していますが、WiR...
次に「WiRunSQL.vbs」を参考にして、自分でスクリプトを書い...
#code(vbscript){{
Option Explicit
Const msiOpenDatabaseModeTransact = 1
Dim msiPath : msiPath = Wscript.Arguments(0)
Dim installer
Set installer = Wscript.CreateObject("WindowsInstaller.In...
Dim database
Set database = installer.OpenDatabase(msiPath, msiOpenDat...
Dim query
query = "INSERT INTO Property(Property, Value) VALUES('AL...
Dim view
Set view = database.OpenView(query)
view.Execute
database.Commit
}}
もう一つサンプルを示します。この例では、Propertyテーブル...
#code(vbscript){{
Option Explicit
Const msiOpenDatabaseModeTransact = 1
Const msiViewModifyInsert = 1
Const msiViewModifyUpdate = 2
Dim msiPath : msiPath = Wscript.Arguments(0)
Dim installer
Set installer = Wscript.CreateObject("WindowsInstaller.In...
Dim database
Set database = installer.OpenDatabase(msiPath, msiOpenDat...
Dim query
query = "Select * FROM Property WHERE Property='ALLUSERS'"
Dim view
Set view = database.OpenView(query)
view.Execute
Dim record
Set record = view.Fetch
Dim viewModify
viewModify = msiViewModifyUpdate
'ALLUSERSがない時
If record Is Nothing Then
Set record = installer.CreateRecord(2)
viewModify = msiViewModifyInsert
End If
record.StringData(1) = "ALLUSERS"
record.StringData(2) = "2"
view.Modify viewModify, record
database.Commit
}}
さて、これと同じことをVB.NETやC#で行うには、どのようにす...
まずはじめに考えられる方法は、上と同様にCOMを使う方法でし...
または、Windows Installer APIを直接呼び出してもよいでしょ...
-[[Windows Installer Reference>http://msdn.microsoft.com/...
Windows Installer APIのラッパークラスがCode Projectで紹介...
-[[Wrapping the Windows Installer 2.0 API>http://www.code...
また、WiXに同梱されているwix.dllも役に立ちます。
-[[Windows Installer XML (WiX) toolset>http://sourceforge...
***他のサイトで紹介されているWindows Installerに関する役...
これまでこのメールマガジンでは8回に分けてデプロイメントプ...
***「プログラムの追加と削除」に表示しない [#n556d229]
#column(注意){{
この記事の最新版は「[[「プログラムの追加と削除」に表示し...
}}
ARPSYSTEMCOMPONENTプロパティを1にします。Windows 2000より...
-[[Frequently Asked Questions About Windows Installer>htt...
***OrcaでMSIファイルを編集後ファイルのサイズが増える [#z7...
#column(注意){{
この記事の最新版は「[[OrcaでMSIファイルを編集後ファイルの...
}}
OrcaでMSIファイルを編集し保存すると、MSIファイルのサイズ...
-[[Frequently Asked Questions About Windows Installer>htt...
***アンインストールするためのショートカットを作成する [#e...
#column(注意){{
この記事の最新版は「[[アンインストールするためのショート...
}}
リンク先が「[SystemFolder]\msiexec.exe」で、コマンドライ...
-[[How do I create a shortcut to my uninstaller?>http://w...
***複数のバージョンの同じコンポーネントをインストールする...
#column(注意){{
この記事の最新版は「[[複数のバージョンの同じコンポーネン...
}}
次のページをどうぞ。
-[[Support for Multiple Versions of the Same Component wi...
***パッチファイルを作成する [#ic83d259]
#column(注意){{
この記事の最新版は「[[パッチファイルを作成する>https://do...
}}
VS.NETのデプロイメントプロジェクトを使ってMSIファイルを作...
-[[How to create installation patches for VS.NET deployme...
***MSIファイル内のファイルを抽出する [#mdc094ce]
#column(注意){{
この記事の最新版は「[[MSIファイル内のファイルを抽出する>h...
}}
下で紹介するツールを使うことにより、MSIファイル内のファイ...
-[[Less MSIerables: A tool to Extract the contents of an ...
デプロイメントプロジェクトによる配布は、Windows Installer...
幸いにして.NETアプリケーションはXCOPYによる配置が可能です...
ここからはこのようにWindows Installer以外のインストーラを...
***Windows Installer以外のインストーラでWindowsサービスア...
#column(注意){{
この記事の最新版は「[[Windows Installer以外のインストーラ...
}}
VS.NETとデプロイメントプロジェクトを使用した場合、作成し...
-[[チュートリアル : コンポーネント デザイナによる Windows...
-[[サービス アプリケーションへのインストーラの追加>http:/...
-[[サービスのインストールとアンインストール>http://www.mi...
この方法によると、「インストーラの追加」リンクをクリック...
さて、Installerクラスによるカスタム動作がどのように行われ...
-[[インストーラ ツール (Installutil.exe)>http://www.micro...
以上をまとめると、次のような方法でサービスのインストール...
まずサービスのプロジェクトにProjectInstallerクラスを追加...
InstallUtil.exe (サービスのEXEファイルのパス)
を、アンインストール時に
InstallUtil.exe /u (サービスのEXEファイルのパス)
を実行すればよいということになります。(つまり、インスト...
ここで新たな問題が発生します。InstallUtil.exeはどこにある...
そこでここでは、InstallUtil.exeは共通言語ランタイムがイン...
共通言語ランタイムがインストールされているディレクトリの...
(Windowsディレクトリ)\Microsoft.NET\Framework\v1.1.4322
であると決め付けたり、レジストリキー
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
の「sdkInstallRootv1.1」の値を調べて知ることができます。...
ここでは、InstallUtil.exeを起動させるために次のようなプロ...
#code(csharp){{
public class InstallUtil
{
private static void Main(string[] args)
{
if (args.Length == 0)
{
ShowError("引数が不正です。");
return;
}
//installutil.exeのフルパスを取得
string installutilPath =
System.IO.Path.Combine(
System.Runtime.InteropServices.RuntimeEnviron...
"installutil.exe");
if (!System.IO.File.Exists(installutilPath))
{
ShowError("installutil.exeが見つかりませんで...
return;
}
//installutil.exeに渡すコマンドラインを作成
string installutilArg = "";
foreach (string arg in args)
{
installutilArg += " " +
(arg.IndexOf(" ") > -1 ? "\"" + arg + "\"...
}
//installutil.exeを起動
System.Diagnostics.Process p;
try
{
p = System.Diagnostics.Process.Start(
installutilPath, installutilArg);
p.WaitForExit();
}
catch
{
ShowError("installutil.exeの起動に失敗しまし...
return;
}
if (p.ExitCode != 0)
{
ShowError("installutil.exeがエラーコード(" +
p.ExitCode.ToString() + ")を返しました。");
return;
}
System.Environment.ExitCode = 0;
}
private static void ShowError(string msg)
{
System.Windows.Forms.MessageBox.Show(
null,
msg + "\nサービスのインストール/アンインスト...
"エラー",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Error);
System.Environment.ExitCode = 1;
}
}
}}
この「instsrv.exe」をInstallUtil.exeと同じコマンドライン...
instsrv.exe (サービスのEXEファイルのパス)
を、アンインストール時に
instsrv.exe /u (サービスのEXEファイルのパス)
を実行すればサービスがインストール・アンインストールされ...
具体例をひとつ示しましょう。ここでは「Inno Setup」を使い...
-[[Inno Setup>http://www.jrsoftware.org/isinfo.php]]
まず[Files]セクションを次のようにします(パスなどは適当に...
#prescroll(wrap=true){{
[Files]
Source: "C:\WindowsService1.exe"; DestDir: "{app}"
Source: "C:\instsrv.exe"; DestDir: "{app}"
}}
次にインストール時とアンインストール時にinstsrv.exeを起動...
#prescroll(wrap=true){{
[Run]
Filename: "{app}\instsrv.exe"; Parameters: "/LogFile= ""{...
[UninstallRun]
Filename: "{app}\instsrv.exe"; Parameters: "/u /LogFile= ...
}}
これでサービスのインストールとアンインストールが行われる...
補足1:このようにinstallutil.exeではなく、Win32 APIを使っ...
-[[Installing a Service Programmatically>http://www.c-sha...
補足2:Inno SetupのPascal scriptingを使ってサービスをイン...
-[[ISX Knowledge Base - Functions to Start, Stop, Install...
***グローバルアセンブリキャッシュにアセンブリをインストー...
#column(注意){{
この記事の最新版は「[[グローバルアセンブリキャッシュにア...
}}
ヘルプの「グローバル アセンブリ キャッシュ」によると、ア...
-[[グローバル アセンブリ キャッシュ>http://www.microsoft....
その3つの方法とは、次の通りです。
+Windows Installerを使ってインストールする
+グローバルアセンブリキャッシュツール(Gacutil.exe)を使う
+WindowsエクスプローラのWindows\assemblyディレクトリにア...
注:WindowsエクスプローラのWindows\assemblyディレクトリの...
-[[アセンブリ キャッシュ ビューア (Shfusion.dll)>http://w...
インストーラを使ってこれを実現するとなると当然Windowsエク...
-[[グローバル アセンブリ キャッシュ ツール (Gacutil.exe)>...
注意:ヘルプの「グローバル アセンブリ キャッシュ」にある...
Gacutil.exeを使ってGACにアセンブリをインストールするには...
Gacutil.exe /i (アセンブリのパス)
とし、アンインストールするには
Gacutil.exe /u (アセンブリ名)
とします。(注)
注:このようなアセンブリ名を指定してアンインストールする...
-[[アセンブリ名>http://www.microsoft.com/japan/msdn/libra...
ヘルプによると、実際の製品のインストールにGacutil.exeを使...
具体例を示しましょう。ここではOPAQUEを使用します。次のよ...
Gacutil.exe /ir (アセンブリのパス) OPAQUE "MyApplicati...
アンインストールするには、次のようにします。
Gacutil.exe /ur (アセンブリ名) OPAQUE "MyApplication1"...
Gacutil.exeの使い方は理解できたものとし、次に進みましょう...
さて、実はGacutil.exeを使う以外にも方法があります。.NET F...
以下にGacInstall、GacRemoveメソッドを使ってGACにアセンブ...
#code(csharp){{
public class GacInst
{
private static void Main(string[] args)
{
if (args.Length == 0)
{
ShowError("引数が不正です。");
return;
}
System.EnterpriseServices.Internal.Publish pub =
new System.EnterpriseServices.Internal.Publis...
if (args[0] == "/i")
{
try
{
//GACにインストール
pub.GacInstall(args[1]);
}
catch
{
ShowError("GACへのインストールに失敗しま...
return;
}
}
else if (args[0] == "/u")
{
try
{
//GACからアンインストール
pub.GacRemove(args[1]);
}
catch
{
ShowError("GACからのアンインストールに失...
return;
}
}
else
{
ShowError("引数が不正です。");
return;
}
System.Environment.ExitCode = 0;
}
private static void ShowError(string msg)
{
System.Windows.Forms.MessageBox.Show(
null,
msg + "\nGACへのインストール/アンインストール...
"エラー",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Error);
System.Environment.ExitCode = 1;
}
}
}}
このプログラム(「gacinst.exe」とする)の使用法を示します...
gacinst.exe /i (アセンブリファイルのフルパス)
またオプション/uでアンインストールします。このとき、アセ...
gacinst.exe /u (アセンブリファイルのフルパス)
参考:
-[[Visual Basic .NET のグローバル アセンブリ キャッシュに...
-[[Demystifying the .NET Global Assembly Cache>http://www...
**コメント [#ce2b2e64]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2005-11-04 (金) 18:00:00,DOB...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]