- PR -

VB.NETのNetScheduleJobAddでパラメータ不正

1
投稿者投稿内容
ウラタン
常連さん
会議室デビュー日: 2003/07/25
投稿数: 29
投稿日時: 2007-10-11 11:47
こんにちは、今、VB.NETで組んでいるプログラムではまっていまして相談させていただけないかと思っています。

環境はWinXP-Pro、VisualStudio.NET2005(VBコンソールアプリ)です。
やりたいことは、アプリ中から同期処理でWindowsのタスクスケジュールを追加する処理です。
COMとWIN32でできるようですが、今回はWIN32を使用しています。

---------------------------- 以下ソース ---------------------------------
' LPCWSTR Servername, // 実行対象のリモートサーバー
' LPBYTE Buffer, // 情報を保持しているバッファ
' LPDWORD JobId // 新しいジョブのジョブ識別子
Private Declare Auto Function NetScheduleJobAdd Lib "netapi32.dll" _
( _
ByVal ServerName As String, _
ByRef Buffer As System.IntPtr, _
ByRef JobId As Integer _
) As Integer

'************
'定数
'************
Private Const MAX_PREF_LEN = -1&
Private Const NERR_Success = 0
Private Const ERROR_MORE_DATA = 234&

Private Structure AT_INFO
Public JobId As Long
Public JobTime As Long
Public DaysOfMonth As Long
Public DaysOfWeek As Byte
Public Flags As Byte
Public dummy As Integer
Public Command As String
End Structure

Sub Main()

' NetJobに渡すパラメータ
Dim lngApiResult As Integer
Dim strServerName As New String("192.168.212.204")
Dim JobId As New Integer

' AT_INFOの構造体定義
Dim typAtInfo As Type
Dim structSize As Integer
typAtInfo = GetType(AT_INFO)
structSize = System.Runtime.InteropServices.Marshal.SizeOf(typAtInfo)

' バッファ確保
Dim lngBufferPointer As System.IntPtr
lngBufferPointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(structSize)

' AT_INFOメンバ設定
Dim AtInfo As AT_INFO = New AT_INFO
AtInfo.Command = "notepad"
AtInfo.DaysOfWeek = 0
AtInfo.JobTime = New DateTime(2007, 12, 20, 12, 0, 0).ToBinary

' バッファにAT_INFOコピー
System.Runtime.InteropServices.Marshal.StructureToPtr(AtInfo, lngBufferPointer, True)

' APIよびだし
lngApiResult = NetScheduleJobAdd(strServerName, _
lngBufferPointer, _
JobId _
)

' 確認
Console.WriteLine("Return:" & lngApiResult)

End Sub
--------------------------------------------------------------------------

このコードを実行すると、API呼び出しで戻り値「87=INVALID PARAMETER」となります。
一応、流れとしては、
1)AT_INFOに追加したいタスク内容を設定。
2)APIに渡すためのポインタに変換
3)API実行
としたつもりです。
MSDNでAT_INFOの内容は確認して、新規追加時に必要なパラメータは入れているはずですが、動作するサンプルを入手できていないので、手探り状態なのがつらいところです。

もし、何か見落としている点など思い当たる方がいらっしゃいましたらご教授いただけると助かります。
また、多言語でも、API使用のサンプルなどの在処をご存知でしたら教えていただけないでしょうか。


[ メッセージ編集済み 編集者: ウラタン 編集日時 2007-10-11 12:01 ]

[ メッセージ編集済み 編集者: ウラタン 編集日時 2007-10-11 12:02 ]
1

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