tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルIPアドレスを追加
記事No15892
投稿日: 2014/05/01(Thu) 22:02
投稿者かかん
VB6.0 Windows7で自マシンにIPアドレスの追加をするツールを作成しています。
追加するインターフェース名とIPアドレスは画面で入力します。

VBは以下のように記述
Dim strInterFaceNm as String
Dim strIPAddress   as String
Dim intRet         as Integer

strInterFaceNm = txtInterFaceNm.text
strIPAddress = txtIPAddress.text

intRet = ShellExecute(me.hwnd,"runas",バッチ名をフルパス,
strInterFaceNm & " " & strIPAddress,exeのパス,1)


バッチファイルは以下のように記述
netsh interface ip add address %1 %2 255.255.255.0

画面でインターフェース名に「ローカル エリア接続」とスペースを含んで入力すると、
バッチが受け取るパラメータは「ローカル」と「エリア接続」になってしまいます。

スペースを含んだインターフェース名でIPアドレスの追加をしたい場合、
バッチファイルにどのようにパラメータを渡せばいいのでしょうか?

[ツリー表示へ]
タイトルRe: IPアドレスを追加
記事No15893
投稿日: 2014/05/02(Fri) 10:00
投稿者オショウ
> スペースを含んだインターフェース名でIPアドレスの追加をしたい場合、
> バッチファイルにどのようにパラメータを渡せばいいのでしょうか?

  試していないけど・・・

  strInterFaceNm = """" & txtInterFaceNm.text & """"

  かな?お試しください。

以上。

[ツリー表示へ]
タイトルRe^2: IPアドレスを追加
記事No15894
投稿日: 2014/05/02(Fri) 19:50
投稿者かかん
オショウさん、返信ありがとうございます。

>   strInterFaceNm = """" & txtInterFaceNm.text & """"

やってみましたが、IPアドレスの追加はできませんでした。
「パラメータ自体は正しく渡せているのか?」を確認すべく
バッチファイルの中身を

echo %1
echo %2
pause

としてみましたが、一瞬で画面が消えてしまい確認できませんでした。

[ツリー表示へ]
タイトルRe^3: IPアドレスを追加
記事No15895
投稿日: 2014/05/02(Fri) 21:00
投稿者オショウ
> pause
>
> としてみましたが、一瞬で画面が消えてしまい確認できませんでした。

  pause しているのに、画面が閉じてしまった
  と言うことですか?

  試しに実験してみたところ・・・

  Windows7 上で、VB6 の統合環境を正常に起動させるには、管理者権限を
  つけて起動させないと、VB6 は正常に起動できない。

  親プロセスが、既に管理者権限を有している場合、"runas"を付けると、
  プロセスの実行自体でエラーしてしまう為、pauseを設定していても画面
  が閉じてしまう。

  よって、"runas" を削除すれば、正常に動作した。

  因みに、VB6 の、Shellでも起動させて正常に動作しましたし、
  Set objShell = CreateObject("Shell.Application")
  として、objShell.ShellExecute を使っても正常に動作しました。

以上。参考まで

[ツリー表示へ]
タイトルRe^4: IPアドレスを追加
記事No15901
投稿日: 2014/05/07(Wed) 18:46
投稿者かかん
おしょうさん、ありがとうございます。

>   Windows7 上で、VB6 の統合環境を正常に起動させるには、管理者権限を
>   つけて起動させないと、VB6 は正常に起動できない。

そうなんですか!
知りませんでした。
ということで、「VB6.exe」のプロパティの
『管理者としてこのプログラムを実行する』
にチェックしたんですが、こういうことで合ってますか?

その状態で
・ShellExecuteのrunasではなくShellでバッチ起動
・パラメータを""""で囲って指定
・バッチの中身はパラメータの表示とpauseだけ
で実行すると、確かにバッチ側で正しくパラメータを受け取る
ことはできました。

ただ、バッチの中身をIPアドレスの追加にすると
『要求された操作には、権限の昇格が必要です。管理者として
実行してください。』
とバッチ画面に表示され、IPアドレスの追加はできませんでした。

「管理者権限で実行」の手順など間違ってますでしょうか?

[ツリー表示へ]
タイトルRe^5: IPアドレスを追加
記事No15902
投稿日: 2014/05/07(Wed) 22:00
投稿者オショウ
> 「管理者権限で実行」の手順など間違ってますでしょうか?

  Windowsは、通常、親プロセスの権限を継承しますので、
  VB6 の統合環境を管理者権限付で起動した場合、その上
  で動作するアプリは、管理者権限付で実行されます。

  コンパイルして実行形式にした場合は、そのアプリ自体
  を管理者権限付で起動しない限り、ユーザーモード実行
  となり失敗するはずです。

  バッチファイルだけ起動したんでしょうか?
  であれば、ユーザーモードなので、失敗するでしょう。

以上。

[ツリー表示へ]
タイトルRe^6: IPアドレスを追加
記事No15903
投稿日: 2014/05/08(Thu) 19:25
投稿者かかん
おしょうさん、何度もありがとうございます。

実行はデバックモードで行いました。
この場合は、問題になってるツールの「〜.vbp」を
「管理者権限で実行」の設定にするのでしょうか?

[ツリー表示へ]
タイトルRe^7: IPアドレスを追加
記事No15904
投稿日: 2014/05/08(Thu) 19:43
投稿者オショウ
> 実行はデバックモードで行いました。
> この場合は、問題になってるツールの「〜.vbp」を
> 「管理者権限で実行」の設定にするのでしょうか?

  デバッグモードかが問題では無くて、統合環境なのか否か。
  統合環境でプログラムを読み込んで動作させているとのこと
  ですので、VB6.exe を管理者権限付で起動する。
  と言うことになります。

  その場合は、runas で、管理者権限付でバッチファイルを起
  動したら、エラーするので、統合環境の場合は、不必要。
  ただ、コンパイルしてexeで実行する場合は、runasが必要に
  なるということです。

  exeを管理者権限付で起動する設定にした場合は、統合環境と
  同じく、runas設定は不必要になります。

  自プロセスが管理者権限を持っているのか否か・・・を確認
  する方法があるので、そういう機能を盛り込めば、わざわざ
  runas設定をどうするのか迷わないですみます。

以上。

[ツリー表示へ]
タイトルRe^8: IPアドレスを追加
記事No15905
投稿日: 2014/05/08(Thu) 22:20
投稿者かかん
オショウさん、ありがとうございます。

意味が分かってなくてすみません。
改めて、今回の実行状況を書きます。

・「VB6.exe」のプロパティの『管理者としてこのプログラムを
実行する』にチェック
・ShellExecuteのrunasではなくShellでバッチ起動
・パラメータを""""で囲って指定
・VB6の統合環境から実行(EXEを作成して実行ではありません)

バッチの中身が「パラメータの表示だけ」の場合、
正しくパラメータを渡せていることが確認できました。

バッチの中身を「IPアドレスの追加」にすると
『要求された操作には、権限の昇格が必要です。
管理者として実行してください。』とバッチ画面に表示されました。

IP追加ができない原因として、どんな事を調べればいいでしょうか?

[ツリー表示へ]
タイトルRe^9: IPアドレスを追加
記事No15906
投稿日: 2014/05/09(Fri) 02:06
投稿者オショウ
> IP追加ができない原因として、どんな事を調べればいいでしょうか?

    ' @Shellを使った場合
    'Shell ("F:\ipadd.bat " & """" & "ローカル エリア接続 3" & """" & " 192.168.0.2")
    
    ' AAPIのShellExecuteを使った場合
    'ShellExecute 0, "", "F:\ipadd.bat", """" & "ローカル エリア接続 3" & """" & " 192.168.0.2", "", SW_SHOWNORMAL
    
    ' BVBScriptを使った場合
    'Set objShell = CreateObject("Shell.Application")
    'objShell.ShellExecute "F:\ipadd.bat", """" & "ローカル エリア接続 3" & """" & " 192.168.0.2", "", "open", 1

  バッチファイルは・・・
netsh interface ip add address %1 %2 255.255.255.0
pause

  で、VB6.exe の統合環境上で動作させ、正常に動作しました。
  VB6.exe は、管理者権限付で起動させています。

※ ご自身の環境に合わせて、書き換えて下さい。

以上。参考まで

[ツリー表示へ]
タイトルRe^10: IPアドレスを追加【解決】
記事No15907
投稿日: 2014/05/09(Fri) 20:01
投稿者かかん
オショウさん
本当に何度もありがとうございました。
今日、改めて設定を確認しながら実行したところ
IPアドレスの追加ができました。

「Shellを使ってVB6.exeを管理者権限付で起動」です。

前回試した時も同じ設定だったのですが、手順が違いました。

前回は、VBソースを開いた状態でVB6.exeの管理者権限チェックを入れ
そのまま実行して「できない。できない。」の状態でした。

今回は、VB6.exeの管理者権限チェックを入れた後でVBソースを開き実行。
あっけないほどすんなりと実行されました。

こんなオチだったとは、自分でも情けなくて脱力です。

本当に助かりました。
ありがとうございました。

あとは、実行時に権限をチェックしてShellかrunasかを処理分岐
できればと思ってます。
また色々と調べながら、やってみます。

[ツリー表示へ]