こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

プログラム初心者です。

突然ですみません。
一昨日、プログラムをこのMicrosoft Visual Basic 2005 Professional Editionで初めて始めたのですが分からない点があったので質問させていただきます。どうぞよろしくお願いいたします。
使用OSは、ウインドウ ビスタ アルティメットです。

Fromを30ほど作り画像処理ソフトを作っていました。
そしてソリューションエクスポーラーというところにC言語で作ったプログラムを入れそれを開くという動作を行うプログラムを打ちました。
しかしデバックの開始では、正常にそのプログラムが正常に実行されるのですが・・・。発行を行い作ったプログラムをインストールしそのソフトを開こうとするとエラーになってしまうのです。
--
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
ProgressBar1.Value = ProgressBar1.Value + 1
Label2.Text = ProgressBar1.Maximum - ProgressBar1.Value
If ProgressBar1.Value = ProgressBar1.Maximum Then
Timer1.Enabled = False

Dim CloseFrom As Form16
CloseFrom = New Form16
Me.Hide()

'ここから
Dim procID As Integer
procID = Microsoft.VisualBasic.Shell("notepad0.exe", AppWinStyle.NormalFocus)

'ここにトラブルが起きています。
Dim settingFrom As Form27
settingFrom = New Form27

settingFrom.ShowDialog()
settingFrom.Dispose()


End If
End Sub

本でプログラムを見て組み合わせただけの変なプログラムですみません。
表示された例外エラーはこれです。
************** 例外テキスト **************
System.IO.FileNotFoundException: ファイルが見つかりません。
場所 Microsoft.VisualBasic.Interaction.Shell(String PathName, AppWinStyle Style, Boolean Wait, Int32 Timeout)
場所 画像処理ソフト.Form16.Timer1_Tick(Object sender, EventArgs e)
場所 System.Windows.Forms.Timer.OnTick(EventArgs e)
場所 System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** 読み込まれたアセンブリ **************
そんなプログラムはな無いと言われてしまいました。
すみませんがどのようにその部分を改善したほうが良いかご伝授くださいよろしくお願いいたします。

投稿日時 - 2007-07-24 18:32:39

QNo.3195973

困ってます

質問者が選んだベストアンサー

埋め込まれたリソースから一時的にファイルを取り出し実行するということ
であれば、その方法は私の勉強不足でわかりません;

他のexeを実行するのであれば、私はexeをファイルとしてコピーする
方法を取ります。

その方法は前の回答の通り「ビルドアクション」を「コンテンツ」、「出力ディレクトリにコピーする」を「コピーする」にすることです。

#あと開発中はうまくいっているのはDebugフォルダ内にnotepad0.exeが
#すでに存在するためだと思います。こちらでは埋め込まれたリソース
#にしただけでは、起動できませんでした。。

投稿日時 - 2007-07-26 09:07:26

お礼

ありがとうございます。解決しました!!
KG_様に本当に感謝です!!

ご指摘通り「ビルドアクション」を「コンテンツ」、「出力ディレクトリにコピーする」を「コピーする」で正常に実行できました。

「notepad0.exe」がいつの間にか壊れていたのが原因で異常終了したようでした。データを入れ替えることで正常に実行されました。

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

投稿日時 - 2007-07-26 09:52:37

ANo.4

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

KG_

#DirectoryとDirectoryPathの誤記、大変申し訳ありませんでした。

notepad0.exeは該当のアプリケーションと同フォルダ内になければ
ならないようなコーディングになっていますが、notepad0.exeは
アプリケーションと同フォルダ内にありますか?

それとも、notepad0.exeはコピーしない方法をとりたいと考えて
らっしゃいますか?

コピーしたいのであれば、ビルドアクションをコンテンツにしてから
出力ディレクトリへのコピーをコピーするにしてはダメでしょうか。

#なんか私が勘違いしてそーなきもする;

投稿日時 - 2007-07-25 12:26:09

補足

ご返事ありがとうございます。
本当に感謝します。
KG_さんが言うとおりだと思います。
本当はそのまま実行したいのですがコピーしたほうが早そうですね。

一度ソリューションエクスポーラー上にあるnotepad0.exeを%temp%フォルダーへコピーしてそこから実行し終了後時に削除したほうが良いようですね。

その方法を私のほうでも調べているのですが分からなくなってしまいました。

コピー方法、実行方法、削除方法を教えて頂けないでしょうか?

質問してが多いですがお相手よろしくお願いいたします。

投稿日時 - 2007-07-25 14:18:52

ANo.2

KG_

"notepad0.exe"

My.Application.Info.Directory & "\notepad0.exe"

としてもだめでしょうか。
ソリューションエクスプローラーに追加して、コンパイルの際にnotepad0.exeも出力するようにしているなら、大丈夫じゃないかなと思います。

投稿日時 - 2007-07-25 09:39:27

補足

再びのお返事ありがとうございます。
指摘頂いた方法を試したところ「'Directory' 'Microsoft.VisualBasic.ApplicationServices.AssemblyInfo' のメンバではありません。」と言われたので「Directory」を「DirectoryPath」変えてデバックを開始した正常に動いていたソフトが「notepad0.exeは動作を停止しました」となってしまいました。

インストール後実行してもそんなファイルはないと叱られてしまいました。
notepad0.exeのビルドアクション部分は埋め込まれたリソースとしているのですが良いのでしょうか?

ご指摘よろしくお願いいたします。

Vistaでもnotepad.exeでメモ帳は開きました。

投稿日時 - 2007-07-25 11:26:52

お礼

KG_さん貴重な指摘ありがとうございます。
誤字がありましたので修正させて頂きます。すみません。
「デバックを開始した正常に動いていたソフト」ではなく「デバックを開始したら正常に動いていたソフト」です。

指摘いただいたものを参考にして変更したものです。

Dim procID As Integer
procID = procID = Microsoft.VisualBasic.Shell(My.Application.Info.DirectoryPath & "\notepad0.exe", AppWinStyle.NormalFocus)

上記に書いたようなエラーになってしまいます。

よろしくお願いいたします。

投稿日時 - 2007-07-25 11:43:02

ANo.1

KG_

Vistaのことは使用したことがないのでよくわかりませんが。

メモ帳を起動するなら「notepad.exe」だと思います。
少なくともXPまでは。

Vistaでは「notepad0.exe」であっているのでしたら申し訳ありません。

投稿日時 - 2007-07-24 19:30:29

補足

早速のお返事ありがとうございます。
説明不足ですみません。
「notepad0.exe」と言うのは私が作ったソフトでありウインドウズに搭載されているメモ帳を開きたいのではありません。

ソリューションエクスポーラーに「notepad0.exe」に入れてそのソフトを実行したいのですがデバックの開始では正常に実行されるのですが、ソフトを発行しそれをインストールしインストールしたソフトを実行するとその部分で「notepad0.exe」が見つからないとなりエラーになってしまうのです。
Dim procID As Integer
procID = Microsoft.VisualBasic.Shell("notepad0.exe", AppWinStyle.NormalFocus)
どうか改善方法をご伝授くださいよろしくお願いいたします。

投稿日時 - 2007-07-24 23:08:07

あなたにオススメの質問