• ベストアンサー

VB.NETで作ったプログラムがサーバー上で実行できない

いつもお世話になっております。 標題の件なのですが、VB.NETで作ったプログラムをサーバーに置いて、 ネットワークごしに実行するとエラーが出てしまいます。 エラーの内容は「system.security.permissions.securitypermission」です。 プログラムの内容は、 (1)XMLファイルを読み取る。 (2)ADOでOracleに接続し、ストアドを実行する。 (3)Oracleからデータを取得し、Excelを出力する。 といった感じです。 エラー内容的にセキュリティの問題だと思うのですが、回避策がございましたら、 ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

XMLの読み取り時にSecurityExceptionが発生したのだと思われます。 UNC経由で.NET Frameworkのプログラムを起動した場合,そのプログラムは,.NET Framework 3.5 SP1より前のバージョンでは完全信頼とされていませんでした。 そのため,ファイルアクセスを行う場合は,OpenFileDialogまたはSaveFileDialogのOpenFileメソッドを通じて行う必要がありました。 おそらく,今回はこの問題に引っかかったのだと思います。 なお,.NET Framework 3.5 SP1 (3.0 SP2/2.0 SP2含む) においては,MyComputerZoneでの実行となり,完全信頼となります。 http://msdn.microsoft.com/ja-jp/library/cc713697.aspx 方法論としては, ・Visual Studio 2005/2008でビルドし,.NET Framework 3.5 SP1を入れた環境下で実行する ・caspolコマンド等で,アセンブリにFullTrustを与える といった必要があります。 # ドメインを構成している場合は,別の解決策があったように思いますが,失念しました。

関連するQ&A

  • C#でプロシージャを実行

    C#でoracleのストアドプロシージャを実行するには どのようにしたらいいのでしょうか? ADOを使用する予定です。

  • VBプログラムについて

    テキストデータを取り込み、そのデータをもとに 表を作成し、Excelシートに出力するという VBプログラムをOS Windows2000、VB6.0(SP5)、Excel2000の環境で作成しました。 このプログラム(exe)をOS Windows95、Excel2000上で 動作するのでしょうか? また、動作させる場合にはどういった注意点が必要でしょうか? ちなみにそのプログラムではADO 2.6も使用しています。 どうぞよろしくお願いします。

  • VB6のプログラムの実行

    VB6で作成されて古いマシン(windows2000)で動作している プログラムをWindowsXP Service Pack3にコピーして実行 しようとすると起動時に以下のエラーが出て立ち上がりません。 ------------------------------------- 実行時エラー '5'; プロシージャの呼び出し、または引数が不正です ------------------------------------- http://support.microsoft.com/kb/811469/ja 上記HPの方法は試したのですが、ダメでした。 尚、ソースが無い為、どこで落ちてるか確認出来ません。 何か分かる所は無いでしょうか? (ちなみに基本的にVB6の動作って、OSの種類やバージョンや、 ServicePaceやWindowsUpdateに影響されると  考えてよろしいのでしょうか?)

  • VB6 SQLサーバー 2005 

    お世話になります。 今まではVB6 + SQLサーバー 2000 に ADO を用いて接続できたいたのですが、 今回 DBをSQL サーバー 2005 Express Edition に替えたところ上手く接続 できません。 「実行時エラー 2147467259  データーソース名および指定されたドライバが見つかりません。」 とエラー表示されます。  

  • VBで作成したパッケージを実行すると実行時エラー'429'が発生してしまいます。

    VBにてcsvファイルのデータをOracleデータベースにinsert、updateするプログラムを作成し、開発パソコンにて正常に動作することを確認しました。 開発パソコン ・Windows2000 Server(SP3) ・Visual Basic 6.0 Enterprise Edition ・Oracle 9i 本番パソコン ・Windows2000 Server(SP3) ・Oracle 9i テストパソコン ・Windows2000 Professional(SP1) 今、上記のように3台のパソコンがあります。 開発パソコンで開発したVBのプログラムをコンパイルしてexeを作成し、開発パソコン上から開発パソコン上のオラクルに対してプログラムを実行すると正常に動作します。 本番パソコンには、Visual Basicをインストールしていないため、プログラムを実行できるようにするには開発パソコンにてディストリビューションウィザードを使ってセットアッププログラムを作成し、本番パソコンにインストールする必要があると思います(質問1.ここまでは正しいですよね??)。 そこでウィザードに沿ってセットアッププログラムを作成し、まずはテストパソコンにてインストール後に実行してみたのですが、エラーが出てしまいました。 「実行時エラー'429' ActiveX コンポーネントはオブジェクトを作成できません。」 質問2.どうすればエラーが発生することなくプログラムを実行できるようになるでしょうか? テストパソコンにオラクルクライアントが必要?それとも何かDLLの更新などが必要? もしおわかりの方いらっしゃいましたら教えて下さい。 よろしくお願いします。

  • VB.NETでADOでOracleのストアドを起動

    いつも楽しく勉強させていただいております。 環境はWindows Server 2008R2 DataCenter、データベースはOracle10G、開発ツールはVB.NET2015です。 このたびWindows Server 2003のVB6.0から上記の環境に乗せ換えているところです(Oracleのバージョンは変わりなし)。 最初にVB6.0からVB.NETへの変換はかけましたが、 なるべくVBのソースは変更しないという制約があります(テストのし直しが膨大になるので)。 VBとOracleはADOを使って接続しています。 ADOを使ってテーブルの読み書きはできるのですが、ストアドプロシージャの起動がうまくいきません。 具体的には入力パラメータはストアドに渡って処理も動くのですが、出力パラメータが返ってきません。 ストアドが正しく動くことはObjectBrowserで確認済みです。 下記のソースはVB6.0で動いていたものですが、VB.NET2015では二つの出力パラメータの値がNothingとなります。 (本来ならステータスとメッセージが返ります)。 VB.NET2015でADOでストアドを使うことは無理なのでしょうか。 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim Cnn As New ADODB.Connection Dim cmd As New ADODB.Command Dim Prm As New ADODB.Parameter Dim strMsg As String On Error GoTo Err_cmdExec_Click With Cnn .Provider = "MSDASQL" .ConnectionString = "DSN=DB1;" & "UID=abc;" & "PWD=efg" .Open() End With 'ストアドプロシージャ呼び出し設定&呼び出し With cmd .CommandTimeout = 0 'タイムアウト設定を無制限に .ActiveConnection = Cnn 'サーバー接続設定 .CommandText = "CHECK_PROC" 'ストアド名セット .CommandType = ADODB.CommandTypeEnum.adCmdStoredProc 'ストアドなのでadCmdStoredProc Prm = .CreateParameter("p_yyyymm", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, 6, "201601") cmd.Parameters.Append(Prm) Prm = .CreateParameter("p_sts", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamOutput, 1) cmd.Parameters.Append(Prm) Prm = .CreateParameter("p_msg", ADODB.DataTypeEnum.adVarChar, ADODB.ParameterDirectionEnum.adParamOutput, 512) cmd.Parameters.Append(Prm) '実行 .Execute() '戻り値の判断&表示用メッセージ生成 If .Parameters.Item("p_sts").Value = "0" Then strMsg = "正常終了しました" Else strMsg = "異常終了しました" & vbCrLf & "ErrMsg=" & .Parameters.Item("p_msg").Value End If End With Exit_cmdExec_Click: '接続解除 Cnn.Close() 'Set Cnn = Nothing 'メッセージ表示 MsgBox(strMsg) Exit Sub Err_cmdExec_Click: 'ストアド以外の場所でのエラーなので、VBのErrの情報セット strMsg = "異常終了しました" & vbCrLf & "ErrNO=" & Err.Number & " ErrMsg=" & Err.Description Resume Exit_cmdExec_Click End Sub

  • VB6 + OO4O プロシージャの実行&複数行を受け取る方法

    VB6 + OO4O プロシージャの実行&複数行を受け取る方法 現在、VB6でOracleデータベースを操作しようと試みている最中で、 OO4Oで接続しています。 (表現誤っているかもしれません。。。) Oracleは今回初めてで、今まではSQLserverだったのですが、 SQLserverで、  1.ストアドを実行(パラメータあり)  2.レコードセット(複数行)を受け取る  3.ループで全件処理   ・・・ というような処理をしていました。 たとえば、あるテーブルの、ある条件に一致したレコード(複数あり)を全件取得 など。 「引数を渡してストアドプロシージャを実行し、複数行を結果として受け取る」ということがしたく、 Oracleでどのように実現させるかを調べてみたのですが、 「SQL文を記述し、受け取る」  例)strSQL = "select * from tbl"    Set OraDynaset = OraDatabase.CreateDynaset(strSQL, 0) というようなサンプルしか見つけられませんでした。 where句で条件を記述すれば同じなのかもしれませんが、 そういったこまごました記述をストアドプロシージャに記載しておき、 呼び出す際はパラメータだけ指定する、ということを想定しています。 ストアドを実行するサンプルは複数見つけたのですが、戻り値が1つのみか、戻り値なしのもので、 複数行を結果として受け取るようなサンプルが見あたりませんでした。 ストアド(PL/SQL)も作成してみたのですが、 単純に  select * from TBL; とするとエラーで、  select * BULK COLLECT INTO vTBl from TBL;  for i in 1 .. vTBl.count loop   -- 全レコードの項目「name」を表示する。   dbms_output.put_line(vTBl(i).name);  end loop; というように1件1件処理させていく方法しか見つけれませんでした。 Oracleのストアドは、今までのSQLServerの考え方はいけないのでしょうか? 調べるとしたら、どのような単語で調べたらよろしいでしょうか? 「VB6」「oo4o」「複数行」「プロシージャ」など、いろいろ努力はしたつもりなのですが。。。 ご指導よろしくお願いいたします。

  • VB2005.NETプログラムから、エクセル2007へのマクロ実行を無効にしたい。

    <PC1 動作環境> ・OS :Vista Business ・ソフト:office2007 Excel <PC2 動作環境> ・OS :Vista Ultimate ・ソフト:office2007 Excel <目的> VB2005.NETで開発したプログラムから、 エクセルのセルに値を入れるソフト開発しており、 エクセル側にマクロを仕込み動かしています。 VB側から、エクセルのマクロを動かしたくない場合があります。 セキュリティセンター⇒マクロの設定⇒警告を表示して全てのマクロを無効にするを選択しました。 <問題> PC1では、VB側から、エクセルのマクロが実行できなくなりますが、 PC2では、VB側から、エクセルのマクロが実行できてしまう。 PC2でも、VB側から、エクセルのマクロを実行しないようにしたいのですが、どなたか解決方法を知っている方いませんでしょうか。 宜しくおねがい致します。

  • 2008ServerでVB6プログラム エラー

    Windows 2008 Server R2 SP1 64bit VB6のプログラムを実行すると 頻繁に下記が発生します 日時 : 2011/11/22 16:55:23 イベントの種類 : エラー コンピュータ : MIYA-SRV2 ユーザー : N/A ソース : Application Error カテゴリー : 100 アプリケーション クラッシュ イベント イベントID : 1000 Windows 2008 Server R2 64bit (SP1でない)場合は、 同様の現象は発生していません なぜでしょうか? 100%は発生しません vbのランタイムは正常にインストールされています

  • 終了してもプログラムが実行したまま(VB)

    非常に時間のかかる繰り返し処理を行なうプログラムを作りました。どのくらい、プログラムが進行しているのかわかりやすくするため、 Progress.Show でProgressという名前のフォームを表示し、そこに、プログラムが何%終わったのか表示するようにしました。 プログラムはDo Loop文が使ってあるので、何%終わったのかを表示するためにLoopした回数を取得して、それをフォームに表示することにしましたが、どこかで調べたら機械は、Do Loopのあいだはフォーム上に文字を表示するのに手が回らないからDoEventsを使ってイベントを実行させなさい、といわれました。 そこまではうまくいきました。プログラムを実行すると、プログラムが実行されて何%終わったかもちゃんと表示できるようになりました。 ところが、プログラムの実行中にフォームの右上の×ボタンを押したところ、フォームは画面から消え、プログラムが終了したように見えるのに、VB Editorでは[実行中]となっており、終わってくれません。ずっとDo Loopが実行されたままです。 Private Sub Form_Terminate() のところに Unload Progress と書いても、「Unloadメソッドは使えません」などというエラー・メッセージが出ます。(フォーム上にボタンを置き、そこをクリックするとUnloadするようにしてみましたがやはり同じことを言われました。) 原因は何でしょうか? フォームをUnloadする、ということの意味をちゃんと理解していないのでいけないのだと思うのですが、調べてもよく言っていることがわかりません。 よろしくお願いします。

専門家に質問してみよう