Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
VBでファイルを開く
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9628#CommentId14623
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2010/5/10 11:13:45
> http://hanatyan.sakura.ne.jp/vbhlp/tap_shell.htm
それは VB6 向けの記事です。VB.NET ならこっち。
http://hanatyan.sakura.ne.jp/dotnet/App03.htm
# ちなみに、そこのサイト(VBレスキュー)にも掲示板はありますよ。
# http://hanatyan.sakura.ne.jp/index.html
ちなみに、こちらのサイト(VB中学校)のサンプルはこちら。
http://homepage1.nifty.com/rucio/main/dotnet/Samples/Sample093ShellEx.htm
> Ret = Shell("Resources\a.exe",VBNormalFocus)
VB6 の Shell の戻り値は Long 型でしたが、
VB.NET の Shell の戻り値は Integer 型です。
> 早速質問ですが、「Resources」フォルダのEXEファイルを開くには、どうすればよいですか?
プロジェクトに Resources を含めているのだと思いますが、その場合、
ソリューション エクスプローラーから、Resources\a.exe のプロパティを見た場合、
【出力ディレクトリにコピー】の設定はどうなっていますか?
もしそれが、コピーする設定になっている場合は、exe の置かれるフォルダの下に
Resources というサブフォルダが出来、その中に a.exe が配置されるため、
パスさえ正しければ、Shell 関数や Process.Start で起動できます。
しかし、コピーしない設定になっている場合(通常はこの状態だと思います)には、
a.exe はプログラム中にバイナリデータとして埋め込まれた状態です。
埋め込まれたバイナリを取り出すには、
Dim binary() As Byte = My.Resources.a
などとして、バイト配列に受けることができますが、そのバイト配列から
Shell や Process.Start でプログラムを直接起動することはできませんので、
System.IO.File.WriteAllBytes などを用いて、一度 exe ファイルとして
ディスク上に配置してから、改めてそれを実行する事になります。
ただし、その a.exe が .NET Framework で作成された物であるならば、
リフレクションを用いて起動できる可能性があります。
Imports System.Reflection
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Dim binary() As Byte = My.Resources.a
Dim asm As System.Reflection.Assembly
asm = Assembly.Load(binary)
asm.EntryPoint.Invoke(asm, BindingFlags.Default, Nothing, Nothing, Nothing)
End Sub
End Class
http://bbs.wankuma.com/index.cgi?mode=al2&namber=47083&KLOG=79