トップ回答者
VS2003でコマンドラインを使う方法は?

質問
-
お世話になります。 とうとうVisual Studio.NET 2003(VS2003)を本格的に使うハメになりました。(今更ながらとは思いつつも)
環境は、.NET Framework 1.1、 iis6.0、 クライアントはXP Pro.、 開発はVS2003 (VB.NET) です。
VS2003で作ったWindowsアプリケーション(例えば test.exe)をノータッチデプロイメントで配布する際、
開発環境下でのクライアントPCのセキュリティポリシーの設定は.NET Framework 構成ツール(Msconfig.exe)を使って手作業で行っておりました(例えばゾーンセキュリティの[信頼済みサイト]の信頼レベルを「完全な信頼」レベルに変更する等)。
これを利用者にお願いする、或いは1台1台クライアントPCの設定して廻るのはあまり効率的ではありません。
色々調べた結果、コード アクセス セキュリティ ポリシー ツール (Caspol.exe) を使ってコマンドラインで処理すればセキュリティポリシーの設定がバッチ処理で実現できる。 (様だ!)
という事がわかったのですが、肝心のVS2003を使っての具体的な手順が分からずに困っています。
VS2003でコードアクセスポリシーツール(Caspol.exe)を使う(コマンドラインを使う)には、何をどうしたらよいのでしょうか?
VS2003でバッチ処理を操作するための(できれば具体的な)手順が知りたいです。
例えば、WindousアプリをURL実行する前に、バッチ処理などで
Caspol.exeコマンドで 「ゾーンセキュリティの「信頼済みサイト」の信頼レベルを「完全な信頼」レベルに設定」 し、
ノータッチデプロイメントでWindowsアプリを配布・実行、
Windowsアプリ終了後に、 「ゾーンセキュリティの設定を元に戻す」
といったことをしたいのです。
よろしくお願いします。
==============
追記:開発PCは、時々しか使えません。のでレスに対する返信は遅くなるかもしれません。
■以下、備忘録
===================================================================================
■備忘録(1):ProcessStart()を呼出す*.exeをURL実行すると「セキュリティポリシーが許可されていない」メッセージがでる。
ノータッチ・デプロイメントでSecurityExceptionの例外をcatchするには
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=22259&forum=7 勝手に要約↓
■備忘録(2):ファイル共有に FullTrust アクセス許可を与えるには
回答
-
解決しました。 (解決ではなく妥協策ですが)
今回の目的の1つは、「クライアントPCのログインユーザ名を取得し、それをWebサーバへ伝える。」 ことなので、ディフォルト状態のクライアントPCでも (ハンドルできない例外) エラーが出ない Help.ShowHelpメソッド でクエリ文字列を利用する事にしました。 初めはVS2003の操作で解決できるのでは?と考えておりましたが、VS2003操作そのものは関係なかったです。ソース・コードがミソでした。 セキュリティ ポリシーの昇格は、アプリやサーバ側に負担させるのではなく、Help.ShowHelp メソッドでヘルプサイトへ利用者を誘導して、利用者そのものに、作業を実施してもらう事にしました。
===VB.NETソースコード===
Process.Start("http://Localhost/test.aspx?ID=" & Environment.UserName)
'次の様に変更↓
Help.ShowHelp(Me, "http://Localhost/test.aspx?ID=" & Environment.UserName))
'これだとエラーが出ないのでTry~ Catch~も使わなくて済む。。。
===VB.NETソースコード終わり===
ありがとうございました。
すべての返信
-
掲題の質問の直接的な解ではありませんが、、、
その後の調査で、.NET Framework 構成ツール(Msconfig.exe)を使って「配置パッケージの作成」(例えば test.msi)ができる事がわかり、作成された配置パッケージ(test.msi)のWindowsインストーラをURL実行する事でセキュリティポリシーを意図した通りに変更・設定できる事がわかりました。
でも、 1回実行しただけでは、上手く有効にならないのです。
有効とするには(配置パッケージ:test.msi)を2回実行する必要があるのです。 何故だろ???
この疑問に関しては、掲題の質問とは微妙に異なりますが、あわせて回答いただけると助かります。
よろしくお願いします。
-
ほぼ解決 : 件名に対する解ではないが、その方向の1つとして次の手法が見えてきた、、、
目標とする自動…ではなく妥協策ではあるが、利用者が致命的に困ることはないだろー
■Process.Start メソッドを使ったWindowsアプリをURLで実行すると 「…セキュリティポリシーは許可されていません…」 ポップアップ (エラーメッセージ) が表示される。 これは、次に示すコード Try~Catch~でキャッチして分岐処理できる。 分岐先(事例の場合は、Help.aspx)でCaspol.exeコマンドや「配布パッケージの作成」で作った*.msiなどを実行する様に利用者へ促すメッセージ本文とする事で、利用者PC側で作業してもらいセキュリティ ポリシーを昇格できるかもしれない。
===VB.NET ソースコード例===
Private Sub wwwHTMLOpen(ByVal h As String)
Process.Start(h)
End SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Try' クエリ文字列を付けてURLを開く
'Process.Start("intranetURL" & LoginUserName)
wwwHTMLOpen("http://Localhost/test.aspx?ID=" & Environment.UserName)
Catch ex As System.Security.SecurityException
If ex.GetType Is GetType(Security.SecurityException) Then
'セキュリティエラーのばあい
'MsgBox(ex.Message)Help.ShowHelp(Me, "http://Localhost/Help.aspx")
Else
'その他のばあい
Throw ex
End If
End TryEnd Sub
===Caspol.exe コマンド例===
%windir%\Microsoft.NET\Framework\v1.1.4322\caspol.exe -machine -q -chggroup Trusted_Zone -zone Trusted FullTrust
===配布パッケージの作成例===
.NET\Framework 1.1 構成ツール(MsCorcfg.msc)を起動 → ノード「ランタイムセキュリティポリシ」 → 右側フレーム「配置パッケージの作成」
注:Trusted_ZoneをFullTrustするとセキュリティ的に?、そういう場合は新しいコードグループを追加してメンバシップ条件をサイトとかURLにすればいいハズだ。
-
解決しました。 (解決ではなく妥協策ですが)
今回の目的の1つは、「クライアントPCのログインユーザ名を取得し、それをWebサーバへ伝える。」 ことなので、ディフォルト状態のクライアントPCでも (ハンドルできない例外) エラーが出ない Help.ShowHelpメソッド でクエリ文字列を利用する事にしました。 初めはVS2003の操作で解決できるのでは?と考えておりましたが、VS2003操作そのものは関係なかったです。ソース・コードがミソでした。 セキュリティ ポリシーの昇格は、アプリやサーバ側に負担させるのではなく、Help.ShowHelp メソッドでヘルプサイトへ利用者を誘導して、利用者そのものに、作業を実施してもらう事にしました。
===VB.NETソースコード===
Process.Start("http://Localhost/test.aspx?ID=" & Environment.UserName)
'次の様に変更↓
Help.ShowHelp(Me, "http://Localhost/test.aspx?ID=" & Environment.UserName))
'これだとエラーが出ないのでTry~ Catch~も使わなくて済む。。。
===VB.NETソースコード終わり===
ありがとうございました。