- PR -

バッチファイルの起動について

投稿者投稿内容
みのる
大ベテラン
会議室デビュー日: 2003/07/03
投稿数: 100
投稿日時: 2003-12-04 13:15
きくちゃんさん、ありがとうございます。

もちろん見てますよ。

最後のスレッドは見てなかったので
早速、試みてみます。

きくちゃんさんの返事が来たことによって
少し安心しました。(いろんな意味で)
みのる
大ベテラン
会議室デビュー日: 2003/07/03
投稿数: 100
投稿日時: 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にそのファイルを読ませようとしていると思われます。

すみません。上の記述をもう少し詳しく教えて頂けませんでしょうか?


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 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()
Ru.F
会議室デビュー日: 2003/11/21
投稿数: 17
投稿日時: 2003-12-04 14:13
こんにちは、Ru.Fと申します。

MDBファイル自体はあくまでデータファイルであり実行することはできません。

通常、WクリックなどによりMDBファイルを直接実行しているような感覚に陥りますが
実際にはWindowsがMSAccess.exeを実行させてMDBファイルを
読み込ませているのです。

引用:

> Dim myprocess As New Process
> myprocess.StartInfo.FileName = "C:\XXXXBAT\KhssnIF.mdb"
> myprocess.StartInfo.Arguments = "01"
> myprocess.Start()



↓の部分は間違いでした。申し訳ありません。
解説の欄を参照。。
ms-help://MS.VSCC/MS.MSDNVS.1041/cpref/html/frlrfsystemdiagnosticsprocessclassstartinfotopic.htm
引用:

ProcessはMDBとAccessを関連付けて実行してくれるような機能はないので



実行ファイルはAccess、引数にデータファイルを設定します。
バッチファイルについても同様です。

以上

Ps
ShellExecuteExというAPI関数を使用した場合は
MDBファイルを指定するだけで実行できます。


[ メッセージ編集済み 編集者: Ru.F 編集日時 2003-12-04 15:25 ]
Ru.F
会議室デビュー日: 2003/11/21
投稿数: 17
投稿日時: 2003-12-04 14:56
こんにちは、Ru.Fです。

見落としがありました。申し訳ありません。
ASP.NETの場合はプロセス起動でAccessを実行すると
バックグラウンドで実行されるため
実行されていないように感じられます。
しかし、タスクマネージャのプロセス一覧を見ると
Accessが実行されています。

なぜバックグラウンドで起動されるかというと
IISの実行アカウントとログインアカウントが違うためです。
バッチ→Access起動という手段であっても同様です。
バッチ内でAccessの実行アカウントをログインアカウントに指定できれば
解決できるかもしれません。

しかし・・。
なぜASP.NETからAccessを実行させるのか意図がよくわかりません・・。

以上
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-04 15:13
引用:

Ru.Fさんの書き込み (2003-12-04 14:56) より:

ASP.NETの場合はプロセス起動でAccessを実行すると
バックグラウンドで実行されるため実行されていないように感じられます。
しかし、タスクマネージャのプロセス一覧を見るとAccessが実行されています。


あ・・・・これですね。
引用:

みのるさんの書き込み(投稿日時: 2003-12-04 12:57)より:

これを実行すると処理が終わらない状態で困っているのですが。。。
(まるで永久ループのように)


う〜ん、今日、同じ答えを別スレッドで返しておきながら、気が付かなかった。



KB257757「[INFO] サーバーサイドでの Office へのオートメーション」は必読です。

とりあえず、Accessを「対話型ユーザ」で実行するように構成すれば、表示されるようになると思います。
みのる
大ベテラン
会議室デビュー日: 2003/07/03
投稿数: 100
投稿日時: 2003-12-04 16:27
Jittaさん、Ru.Fさん本当にありがとうございます。

Jittaさんへ>

Jittaさんの「私のやっている処理」のソースを参考に
バッチを起動しました。

うまくできませんでしたが、
KB257757「[INFO] サーバーサイドでの Office へのオートメーション」を
これからしっかりと読みます。

Ru.Fさんへ>

>しかし・・。
>なぜASP.NETからAccessを実行させるのか意図がよくわかりません・・。

についきましては、いわゆる「仕様変更」です。。。。。。

とにかく
いままでのたくさんのスレッドを参考にして頑張ります。

みのる
大ベテラン
会議室デビュー日: 2003/07/03
投稿数: 100
投稿日時: 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にお詳しい方宜しくお願いします。

私ははずかしながら初めてで困っています。



スキルアップ/キャリアアップ(JOB@IT)