- PR -

C#でアイコンを埋め込み関連付けで利用する方法

1
投稿者投稿内容
ついん
会議室デビュー日: 2004/12/09
投稿数: 4
投稿日時: 2004-12-09 22:47
はじめまして、ついんと言います。

C#でアプリを作成している初心者です。

以前VB6で作成したアプリをC#で作り直しているのですが、ビルドしたアプリにアイコンファイルを埋め込みファイルの関連付けで利用する方法が判りません。
(レジストリのDefaultIconキーで「C:\MyApp.exe,1」みたいな使い方)

VB6の時はrc.exeを使ってリソースファイル(?)を作成し組み込んだら出来ました。
C#ではどうやって行えばいいのでしょうか?

色々調べて「ResEditor.exe」で「***.resources」ファイルを作ってソリューション(?)に組み込んだりしてみたのですが、「IconStars」というアイコン取り出しソフトでビルドしたアプリを見てみてもアイコンが増えていません。
それとも「ResEditor.exe」でのリソースファイルの作り方が悪いのでしょうか?

どなたかご存知の方、ご教授御願いします。
masa
常連さん
会議室デビュー日: 2003/04/16
投稿数: 38
投稿日時: 2004-12-11 11:57
.NETでは、Win32リソースと.NETリソースがあって
エクスプローラで表示されるような、
つまりWin32システムからアクセスされるようなリソースは
Win32リソースとして作る必要があります。
ResEditor.exeは.NETリソースを作成するためのものです。

試したわけではないですが、
おそらくアイコンもWin32リソースとして追加する必要があります。
ですが、VS.NETではWin32リソースを簡単に追加できないようです。
Win32リソースの組み込み方法は、
次のTIPSにあるマニフェスト・ファイルの組み込みとほぼ同じです。
マニフェスト・ファイルをアプリケーションに組み込むには?
ついん
会議室デビュー日: 2004/12/09
投稿数: 4
投稿日時: 2004-12-11 19:16
masaさん、ご教授ありがとうございます。

リソースにそういう違いがあるんですねぇ。
Win32リソースって言うのは.NET以前の形式であって、同様な事が.NETでも出来る物と思っていました。

教えて頂いたページを参考にWin32リソースを作成しコマンドラインでビルドしたら確かにアイコンを組み込む事が出来ました。
ありがとうございます。

ただ、別の問題が・・・
コマンドラインでビルドしてエラーも何も出ずにビルドは正常に終わるのですが、ビルドしたアプリを開くとエラーが発生してフォームが開きません。
「Just-In-Time デバッグ」というウィンドウが開いて、「例外 'System.Resorces.
MissingManifestResourceException'が(アプリ名).exeで発生しました。」と言うメッセージの下に「可能なデバッガ」リストボックスがあります。

教えて頂いたページを参考に以下のようなコマンドラインビルドのバッチファイルを作成してやったのですが、どこか記述の仕方が悪いのでしょうか?
(Form1,Form2,Form3,Namespaceは実際には違う名前ですが便宜上以下では変更してます)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
echo ##### コンパイラの環境を設定 #####
call "%VS71COMNTOOLS%vsvars32.bat"

echo ##### リソース・ファイル(.resourcesファイル)の生成#####
resgen Form1.resx
resgen Form2.resx
resgen Form3.resx

echo ##### ビルド開始 #####
csc.exe /win32res:icon.res /res:Form1.resources,
Namespace.Form1.resorces,Form2.resources,
Namespace.Form2.resorces,Form3.resources,
Namespace.Form3.resources /target:winexe *.cs

echo ##### ビルド完了! #####
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
VS.NET上でビルドするとWin32リソースは組み込めないものの正常に動作するアプリがビルド出来ました。
masa
常連さん
会議室デビュー日: 2003/04/16
投稿数: 38
投稿日時: 2004-12-11 19:55
/resは1つ1つ指定してください(表示の都合上、改行)。

コード:
csc.exe /win32res:icon.res
 /res:Form1.resources,Namespace.Form1.resources
 /res:Form2.resources,Namespace.Form2.resources
 /res:Form3.resources,Namespace.Form3.resources
 /target:winexe *.cs

ついん
会議室デビュー日: 2004/12/09
投稿数: 4
投稿日時: 2004-12-11 22:14
おっしゃる通り1つずつしていするとちゃんとアプリが動作しました。

また問題があるのですが、「/win32res」オプションを使ってリソースファイルを組み込むと「AssemblyInfo.cs」がうまく組み込めていないみたいです。

「/win32res」オプションを外すとちゃんと組み込めています。

併用は出来ないって事なんでしょうか?
masa
常連さん
会議室デビュー日: 2003/04/16
投稿数: 38
投稿日時: 2004-12-11 22:54
> 「/win32res」オプションを使ってリソースファイルを組み込むと
> 「AssemblyInfo.cs」がうまく組み込めていないみたいです。
> 併用は出来ないって事なんでしょうか?

たぶんバージョン情報のことですよね?

バージョン情報にも、Win32用とアセンブリ(.NET)用があるらしく
確かに、残念ながら、「/win32res」オプションをつけると
Win32の方のバージョン情報は自動生成してくれなくなるみたいですね。
(/win32resなしのときはアセンブリのバージョン情報をコピーしてくれるみたい)

Win32のバージョン情報を設定するには、
.resファイルにバージョン情報を書くしかないです。
それ以外の方法は、私は分かりません。

しかし、「AssemblyInfo.cs」がうまく組み込まれていないかというとそうではなく、
例えばアセンブリのバージョンなどの情報は正しく組み込まれています。
(アプリケーション内部からアセンブリ情報を取得すると正しく取得できます)
ついん
会議室デビュー日: 2004/12/09
投稿数: 4
投稿日時: 2004-12-11 23:41
やはり併用は出来ないんですね。

「AssemblyInfo.cs」にバージョン情報とか製品情報とか入れていたので・・・

アイコンと同じようにバージョン関係もリソースに手動で書けば出来そうなのでそちらでやってみます。

いろいろとありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)