none
VS2003でコマンドラインを使う方法は? RRS feed

  • 質問

  • お世話になります。 とうとう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 アクセス許可を与えるには

    http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vsintro7/html/vxurfProjectFolderNotSecureDialogBox.asp

    2007年10月19日 11:12

回答

  • 解決しました。 (解決ではなく妥協策ですが)

     

    今回の目的の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ソースコード終わり===

     

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

    2007年10月24日 6:48

すべての返信

  • 掲題の質問の直接的な解ではありませんが、、、

     

    その後の調査で、.NET Framework 構成ツール(Msconfig.exe)を使って「配置パッケージの作成」(例えば test.msi)ができる事がわかり、作成された配置パッケージ(test.msi)のWindowsインストーラをURL実行する事でセキュリティポリシーを意図した通りに変更・設定できる事がわかりました。

     

    でも、 1回実行しただけでは、上手く有効にならないのです。

    有効とするには(配置パッケージ:test.msi)を2回実行する必要があるのです。 何故だろ???

     

    この疑問に関しては、掲題の質問とは微妙に異なりますが、あわせて回答いただけると助かります。

     

    よろしくお願いします。

    2007年10月20日 0:47
  • ほぼ解決 : 件名に対する解ではないが、その方向の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 Sub

    Private 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 Try

    End 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にすればいいハズだ。

    2007年10月21日 3:09
  • 解決しました。 (解決ではなく妥協策ですが)

     

    今回の目的の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ソースコード終わり===

     

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

    2007年10月24日 6:48