- - PR -
CreateProcessでエラー
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-21 18:20
VB.NET(2003)で、別exeを起動し、終了まで待機するということをするために、
system.Diagnostics.Processクラスを使用していました。 しかし、実際に動かす環境がMetaFrameで、ユーザー権限の関係で このクラスは使用できないようで画面の起動すらできなくなります。 ですので、APIのCreateProcess、WaitForSingleObjectを使用するように 変更したいのですが、下記の用に使用すると、 CreateProcessのところで、 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 の例外となってしまいます。 どのインスタンスを作成する必要があるのでしょうか? Public Structure PROCESS_INFORMATION Public hProcess As Integer Public hThread As Integer Public dwProcessId As Integer Public dwThreadId As Integer End Structure Public Structure STARTUPINFO Public cb As Integer Public lpReserved As String Public lpDesktop As String Public lpTitle As String Public dwX As Integer Public dwY As Integer Public dwXSize As Integer Public dwYSize As Integer Public dwXCountChars As Integer Public dwYCountChars As Integer Public dwFillAttributes As Integer Public dwFlags As Integer Public wShowWindow As Short Public cbReserved2 As Short Public lpReserved2 As Short Public hStdInput As Integer Public hStdOutput As Integer Public hStdError As Integer End Structure Declare Function CreateProcess Lib "kernel32.dll" Alias "CreateProcessA" _ (ByVal lpApplicationName As String, _ ByVal lpCommandLine As String, _ ByVal lpProcessAttributes As Long, _ ByVal lpThreadAttributes As Long, _ ByVal bInheritHandles As Integer, _ ByVal dwCreateionFlags As Integer, _ ByVal lpEnvironment As Integer, _ ByVal lpCurrentDirectory As String, _ ByVal lpStartupInfo As STARTUPINFO, _ ByVal lpProcessInformation As PROCESS_INFORMATION) As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pi As PROCESS_INFORMATION Dim si As STARTUPINFO Dim result As Integer = CreateProcess("c:/test.exe", "", 0, 0, 0, 0, 0, "", si, pi) ・・・ End Sub 以上、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2006-11-21 19:54
定義も含め、何かと間違えていませんか。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-11-21 23:58
MetaFrameってプログラムが起動できない。。。 そうなのでしょうか?MetaFrame知らないので断言はしませんが。。。 ちなみにCreateProcess()のImpersonateでも使うのでしょうか。 ってWIN32APIの偽装も怪しくて好きではありませんが。
それだとsystem.Diagnostics.Processと同じなのでは。。。 そういう問題じゃない?? | ||||||||
|
投稿日時: 2006-11-24 13:30
>じゃんぬねっと さま
ありがとうございます。 某サイトで、VB.NETでのCreateProcessの宣言方法として、 本文に記載したような方法になっていたので、真似をしてました。 根本的にダメということなのですね? 勉強になりました。 >加納正和 さま MetaFrameを介さなければ使えていたので、 当初はMetaFrameのせいだと考えていたのですが、権限の関係だったようです。 system.Diagnostics.Processは、管理者権限じゃないと使えないようなので。 権限がらみのところは、当方は触ることができないので、 CreateProcessで代替しようと考えました。 | ||||||||
|
投稿日時: 2006-11-24 15:20
なるほど、下記リンク先でそのように教示を受けたのですね。そういうことは、最初に書いておいた方が (ご自身も回答者も) 楽になると思いますよ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-11-24 15:31
>system.Diagnostics.Processは、管理者権限じゃないと使えないようなので。
Process クラスを使って「やる事」によりますが、必ずしも「管理者権限が必要」ということはありません。 Process クラスも最終的には CreateProcess や ShellExecuteEx 辺りの API を呼び出しているので、問題を解決するためには、きちんと原因を究明することが第一だと思います。 |
1