人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Windows7における、VB2008.NETで質問です。
作業時に、各ユーザのMy Documents内に設置された特定の作業フォルダへバッチファイルを書き出した後、Shellで実行するプログラムがあります。
それが昨日までは動いていたのに、今日になって動かないという現象が発生しています。
動かない場所は、Shellの実行箇所で、ファイルが存在しないことによる例外です。
事前に以下のようにファイルが存在することを確認してから実行しても、if文を乗り越えて例外を発生させるので困っております。
Dim fsyObject As Object = CreateObject("Scripting.FileSystemObject")
If fsyObject.FileExists(strBatFull) Then
intResult = Shell(strBatFull, vbHide, True)
End If
XPでは、この症状は発生しません。Windows7でも発生するPCと発生しないPCが存在します(例によってVBがインストールされていないPCで発生しますorz)。
よろしくお願い致します。


●質問者: くじぇ
●カテゴリ:コンピュータ
✍キーワード:.NET as object orz pc
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● ardarim
●60ポイント

Shell関数において、FileNotFoundExceptionが発生するのは「ファイルが存在しない」という理由だけにとどまりません。様々な理由(例えば、ファイルのアクセス権限エラー、依存するDLLが見つからない、等)で、ファイルが存在してもプログラムが起動できない場合は、FileNotFoundExceptionにマップされてしまいます。


まずはFileNotFoundExceptionの詳細を調べるべきかと。

FileNotFoundException メンバ (System.IO)

FileNotFoundException.MessageやFileNotFoundException.InnerExceptionはどうでしょう?特にInnerExceptionにはファイルが存在しない以外の原因となった要因となるExceptionが入っている可能性があります。


また、エクスプローラ上や、コマンドラインから直接そのプログラム(Shellで起動しようとした)を起動しようとした場合、正しく起動できるのでしょうか?

◎質問者からの返答

ardarimさんありがとうございます。

Shell実行前にMSGBOXを入れて、strBatFullの内容をコピペし

コマンドラインから手作業で実行させた場合は動作しました。

このままShellにこだわっていても仕方が無さそうだったので、代わりとして

Dim sdpProcess As System.Diagnostics.Process = New Process()

sdpProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

sdpProcess.StartInfo.FileName = strBatFull

sdpProcess.Start()

sdpProcess.WaitForExit()

sdpProcess.Close()

sdpProcess.Dispose()

としてみましたところ、こちらは正しく起動しました。

発生原因がよくわからないのが不気味に感じています。

しかし、とりあえずSystem.Diagnostics.Processで様子を見ようと考えています。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ