C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

VBAのCreateProcessをVB.netにて実装

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■96604 / inTopicNo.1)  VBAのCreateProcessをVB.netにて実装
  
□投稿者/ くま (1回)-(2020/12/24(Thu) 13:16:03)

分類:[VB.NET/VB2005 以降] 

AccessのVBAにて開発されたプログラムをVB.netへ移行する作業を行っておりますが、CreateProcessというAPI関数?を移行できません。
ネットで検索してもなかなか良いサンプルが見つからず、恐れ入りますがお力をお貸し頂けないでしょうか。

環境
Win10 64bit
VisualStudio2019

以下がAccessのVBAのコードです。

--------------------------------------------------------------
※クラスで宣言している変数
Dim pInfo2 As PROCESS_INFORMATION
Dim sInfo2 As STARTUPINFO
--------------------------------------------------------------
    Dim lngTaskID As Long
    Dim lngProcHandle As Long
    Dim lngExitCode As Long
    Dim lngReturnCode As Long
    Dim RetWork As String * 254
    Dim lStTime As Date
    Dim lIntTime As Date
    Dim ErrMess As String
    Dim strStatus As String

    lngProcHandle = CreateProcess(vbNullString, _
                        cEOS_PRG_PATH, _
                        ByVal 0&, _
                        ByVal 0&, _
                        1&, _
                        NORMAL_PRIORITY_CLASS, _
                        ByVal 0&, _
                        vbNullString, _
                        sInfo2, _
                        pInfo2 _
     )

※補足
cEOS_PRG_PATH ⇒ 実行するEXEフルパス
--------------------------------------------------------------
※API関数部分

Public Declare Function CreateProcess Lib "kernel32" _
  Alias "CreateProcessA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpCommandLine As String, _
  lpProcessAttributes As Any, _
  lpThreadAttributes As Any, _
  ByVal bInheritHandles As Long, _
  ByVal dwCreationFlags As Long, _
  lpEnvironment As Any, _
  ByVal lpCurrentDriectory As String, _
  lpStartupInfo As STARTUPINFO, _
  lpProcessInformation As PROCESS_INFORMATION _
  ) As Long
--------------------------------------------------------------


引用返信 編集キー/
■96606 / inTopicNo.2)  Re[1]: VBAのCreateProcessをVB.netにて実装
□投稿者/ くま (2回)-(2020/12/24(Thu) 13:26:14)
すみません、何がうまくいかないのかを具体的に書いていませんでした。

とりあえずCreateProcessのAPI関数部分をそのまま流用してみたのですが、以下のようにエラーが発生してしまいます。
・Any ⇒ As AnyはDeclareステートメントではサポートされていません。
・STARTUPINFO ⇒ STARTUPINFOは定義されていません。
・PROCESS_INFORMATION ⇒ PROCESS_INFORMATION は定義されていません。

これは何かに置き換えるべきなのでしょうか。。。

引用返信 編集キー/
■96607 / inTopicNo.3)  Re[1]: VBAのCreateProcessをVB.netにて実装
□投稿者/ とっちゃん (706回)-(2020/12/24(Thu) 13:30:11)
No96604 (くま さん) に返信
> AccessのVBAにて開発されたプログラムをVB.netへ移行する作業を行っておりますが、CreateProcessというAPI関数?を移行できません。
> ネットで検索してもなかなか良いサンプルが見つからず、恐れ入りますがお力をお貸し頂けないでしょうか。
>
VB.NET に移植するのであれば、API を直接呼び出すのではなく、Process クラスを使うほうが良いと思います。


・Process クラス(リンク先は、.NET Framework 4.8 用)
https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process?WT.mc_id=DT-MVP-32182&view=netframework-4.8

単純にプログラムを起動するだけならば、以下の1行で実現できます(別途Usingが必要ですが、そのあたりはVS-IDE が面倒を見てくれます)。

Process.Start( cEOS_PRG_PATH )

で実行できます。


引用返信 編集キー/
■96609 / inTopicNo.4)  Re[2]: VBAのCreateProcessをVB.netにて実装
□投稿者/ くま (4回)-(2020/12/24(Thu) 13:42:54)
> VB.NET に移植するのであれば、API を直接呼び出すのではなく、Process クラスを使うほうが良いと思います。
>
>
> ・Process クラス(リンク先は、.NET Framework 4.8 用)
> https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process?WT.mc_id=DT-MVP-32182&view=netframework-4.8
>
> 単純にプログラムを起動するだけならば、以下の1行で実現できます(別途Usingが必要ですが、そのあたりはVS-IDE が面倒を見てくれます)。
>
> Process.Start( cEOS_PRG_PATH )
>
> で実行できます。
>

ありがとうございます、本当に助かります。
プログラムを実行して30分以上起動できれなければ強制終了という流れで実装するのですが、
一旦今から急いでコードを書いてみます。問題なければこちらを解決済とし、うまくいかなければ追記させて頂きます。
うまくいってもいかなくても必ずご報告致します。
引用返信 編集キー/
■96617 / inTopicNo.5)  Re[2]: VBAのCreateProcessをVB.netにて実装
□投稿者/ くま (5回)-(2020/12/24(Thu) 15:20:11)
軽く動作確認した結果、正常にProcessで起動できたようです。
ご回答頂いたとっちゃん様、ありがとうございました。
また何かありましたらこちらで相談させて頂きます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ