- - PR -
バッチファイルの起動について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-12-04 13:15
きくちゃんさん、ありがとうございます。
もちろん見てますよ。 最後のスレッドは見てなかったので 早速、試みてみます。 きくちゃんさんの返事が来たことによって 少し安心しました。(いろんな意味で) | ||||||||
|
投稿日時: 2003-12-04 13:50
Jittaさん、ありがとうございます。
カキコの記述に誤りがありました。すみません。 > Dim myprocess As New Process > myprocess.StartInfo.FileName = "C:\XXXXBAT\KhssnIF.mdb" > myprocess.StartInfo.Arguments = "01" > myprocess.Start() 上のソースはbatファイルを起動させず、直接KhssnIF.mdb(VBA)に 引数を与えKhssnIF.mdbを起動する記述です。 で、KhssnIF.mdbに引数を渡し起動する batファイル「KhssnIF(01).bat」を使う場合は > Dim myprocess As New Process > myprocess.StartInfo.FileName = "C:\XXXXBAT\KhssnIF(01).bat" > myprocess.Start() と、いろいろやっているのです。 ダメなんです。 もちろん、KhssnIF(01).batを直接ダブルクリックするときは正常に動きます。 >おそらく、WindowsはAccessにそのファイルを読ませようとしていると思われます。 すみません。上の記述をもう少し詳しく教えて頂けませんでしょうか? | ||||||||
|
投稿日時: 2003-12-04 14:01
私のやっている処理
Dim ExecuteFile As String = "バッチファイル.bat" Dim argument As String = String.Format("4 ARGUMENTS") Dim inf As New ProcessStartInfo(ExecuteFile, argument) inf.UseShellExecute = False ' STDOUTを受ける準備 inf.RedirectStandardOutput = True ' STDOUTを受ける宣言 inf.CreateNoWindow = True ' CMD.EXEのウインドウを出さない inf.WindowStyle = ProcessWindowStyle.Minimized ' 最小化させておく(不要?) Dim proc As New Process proc.StartInfo = inf proc.Start() | ||||||||
|
投稿日時: 2003-12-04 14:13
こんにちは、Ru.Fと申します。
MDBファイル自体はあくまでデータファイルであり実行することはできません。 通常、WクリックなどによりMDBファイルを直接実行しているような感覚に陥りますが 実際にはWindowsがMSAccess.exeを実行させてMDBファイルを 読み込ませているのです。
↓の部分は間違いでした。申し訳ありません。 解説の欄を参照。。 ms-help://MS.VSCC/MS.MSDNVS.1041/cpref/html/frlrfsystemdiagnosticsprocessclassstartinfotopic.htm
実行ファイルはAccess、引数にデータファイルを設定します。 バッチファイルについても同様です。 以上 Ps ShellExecuteExというAPI関数を使用した場合は MDBファイルを指定するだけで実行できます。 [ メッセージ編集済み 編集者: Ru.F 編集日時 2003-12-04 15:25 ] | ||||||||
|
投稿日時: 2003-12-04 14:56
こんにちは、Ru.Fです。
見落としがありました。申し訳ありません。 ASP.NETの場合はプロセス起動でAccessを実行すると バックグラウンドで実行されるため 実行されていないように感じられます。 しかし、タスクマネージャのプロセス一覧を見ると Accessが実行されています。 なぜバックグラウンドで起動されるかというと IISの実行アカウントとログインアカウントが違うためです。 バッチ→Access起動という手段であっても同様です。 バッチ内でAccessの実行アカウントをログインアカウントに指定できれば 解決できるかもしれません。 しかし・・。 なぜASP.NETからAccessを実行させるのか意図がよくわかりません・・。 以上 | ||||||||
|
投稿日時: 2003-12-04 15:13
あ・・・・これですね。
う〜ん、今日、同じ答えを別スレッドで返しておきながら、気が付かなかった。 KB257757「[INFO] サーバーサイドでの Office へのオートメーション」は必読です。 とりあえず、Accessを「対話型ユーザ」で実行するように構成すれば、表示されるようになると思います。 | ||||||||
|
投稿日時: 2003-12-04 16:27
Jittaさん、Ru.Fさん本当にありがとうございます。
Jittaさんへ> Jittaさんの「私のやっている処理」のソースを参考に バッチを起動しました。 うまくできませんでしたが、 KB257757「[INFO] サーバーサイドでの Office へのオートメーション」を これからしっかりと読みます。 Ru.Fさんへ> >しかし・・。 >なぜASP.NETからAccessを実行させるのか意図がよくわかりません・・。 についきましては、いわゆる「仕様変更」です。。。。。。 とにかく いままでのたくさんのスレッドを参考にして頑張ります。 | ||||||||
|
投稿日時: 2003-12-05 16:44
Ru.Fさんへ
>Ps >ShellExecuteExというAPI関数を使用した場合は >MDBファイルを指定するだけで実行できます。 ということで、API関数を使ってみようとしましたが 「shell32.dll の ShellExecuteEX というエントリ ポイントが見つかりません。」 というエラーが発生しました。 お詳しいそうなのでお聞きします。 たぶん 「hWnd 」っていうのがおかしいのかな?と考えております。 的外れだったら、すみません。 ソースは Public Structure SHELLEXECUTEINFO Dim cbSize As Long Dim hWnd As Long (省) End Structure Public Declare Function ShellExecuteEX Lib "shell32.dll" _ Alias "ShellExecuteEX" (ByVal IpExecInfo As SHELLEXECUTEINFO) As Integer Public Declare Function GetDesktopWindow Lib "user32" () As Long With ShellInfo .cbSize = Len(ShellInfo) .fMask = See_MASK_NOCLOSEPROCESS .hWnd = GetDesktopWindow .IpVerb = "open" & vbNullChar .IpFile = "C:\xxxx\zzz.mdb & vbNullChar .IpParameters = vbNullChar .lpDirectory = vbNullChar .nShow = 0 .hInstApp = 0 .IpIDList = 0 End With intRst = basSetAPI.ShellExecuteEX(ShellInfo) APIにお詳しい方宜しくお願いします。 私ははずかしながら初めてで困っています。 |