ユーザーに自分のWebサイトからexeをダウンロードしてもらいたいのですが、ダウンロード時に(ダウンロード時に同期して)XMLファイルがこのアプリケーションに挿入されます。このXMLファイルには、公開鍵と署名が含まれています。
ダウンロードする前にファイルを挿入し、後で実行中に参照するにはどうすればよいですか?
理想的には、ファイルを挿入するためにシェルを使用するのではなく、ネイティブの.NETAPIを使用します。
ユーザーに自分のWebサイトからexeをダウンロードしてもらいたいのですが、ダウンロード時に(ダウンロード時に同期して)XMLファイルがこのアプリケーションに挿入されます。このXMLファイルには、公開鍵と署名が含まれています。
ダウンロードする前にファイルを挿入し、後で実行中に参照するにはどうすればよいですか?
理想的には、ファイルを挿入するためにシェルを使用するのではなく、ネイティブの.NETAPIを使用します。
あなたはMono.Cecilでそれを簡単に行うことができます、あなたはただ次のようなものを書く必要があるでしょう:
var module = ModuleDefinition.ReadModule ("Application.exe");
module.Resources.Add (
new EmbeddedResource (
"signature.xml",
ManifestResourceAttributes.Private,
File.ReadAllBytes ("signature.xml")));
module.Write ("Application.exe",
new WriterParameters {
StrongNameKeyPair = new StrongNameKeyPair ("keypair.snk")
});
署名.xmlファイルからsignature.xmlリソースを挿入し、Application.exeの署名に使用したkeypair.snkを使用してアセンブリにサインバックします。
そして実行時に、あなたはただ使用する必要があるでしょう:
var stream = Assembly.GetExecutingAssembly ()
.GetManifestResourceStream ("signature.xml");
リソースを取得します。
ファイルを挿入するには、ファイルをプロジェクトに追加します。次に、ソリューションエクスプローラーでそれを右クリックし、プロパティに移動して、そのタイプをEmbeddedResourceに変更します。
実行時にロードするには、を使用しますAssembly.GetManifestResourceStream()
。詳細については、http://msdn.microsoft.com/en-us/library/xc4235zt.aspxを参照してください。
彼が書いたものから、彼はダウンロードする前にファイルを動的に変更するつもりのようです。これは実際には、使用するサーバー側の言語と、サーバー/ホスティングプロバイダーアカウントをどの程度制御できるかによって異なります。
このexeファイルを生成してダウンロード用に送信するdownload.aspxファイルがあるとします。できることの1つは、アセンブリのソースをサーバーに配置してから、download.aspxがそれをアセンブルし、ダウンロード用に送信することです。(難しい方法)
別の方法は、コンパイルされたアセンブリをサーバーに配置し、たとえばcecil(.NETアセンブリにプログラムでリソースを埋め込む)などを使用して変更し、ダウンロード用に送信することです。
ファイルをプロジェクトに追加します。通常は、次の行に沿ったものです。
+solution
+project
+Resources
+SomeDirectory
-SomeFile
次に、プロジェクトのプロパティに移動し、左側のサイトの[リソース]タブに移動してfiles
、上部のナビゲーションバーでリソースを選択します。リソースを追加する>既存のファイルを追加する場合に選択します。プロジェクトに入れたばかりのファイルを参照し、それを追加することを選択します。
これで、プロジェクトのプロパティの[リソース]タブにファイルが表示されます。[リソース]タブでファイルの名前をより意味のあるものに変更します。
これで、ファイルはプロジェクトの埋め込みリソースになり、次のコードでアクセスできます。
var MyFile = Properties.Resources.MyFile