USBメモリ内のソフトからPC内にあるソフトなりを起動させて
その起動後、USBメモリ内のソフトを終了させた後でUSBメモリを
抜こうとしても抜けないのですが…
これはUSBメモリ内のソフトが親としてPC内の起動させたソフトが子ソフトの
ようになってプロセスの中でどこか繋がったままでいるのでしょうか?
もし、繋がりがあるようでしたらそれを切り離す方法はあるのでしょうか?
USBメモリなどが実行後に抜けるようになれば問題ないのですが
終了させれば繋がりがなくなると思いましたが違うようですし…
曖昧な書き方で申し訳ないですが、わかる方よろしくお願いします。
CM_Request_Device_Eject の話でしょうか?
ありがとうございます
CM_Request_Device_Eject関係ではないと思いますが
取り外しは、トレイから通常通り取り外し作業をしても
デバイスが停止できないとエラーが出ます。
ただ、USBメモリからPC内の起動させたソフトを終了させると
USBメモリは問題なく取り外す事ができます。
PC内の起動させたソフトを終了させなくともUSBメモリが
取り外せるようにしたいという事なんですがわかりますでしょうか?
起動方法としては、WinExecの方を使用しているのですが
これが問題であったりするでしょうか?
他にもUSB内のソフトをAとして
PC内にB,Cのソフトがあるとします。
AからBを呼び出して起動させ、Aは終了させ
BからCを起動させてBを終了させてもUSBメモリが
外れないような感じになります。
わかりやすいのがバッチファイルにソフトの呼び出し以外の
コマンドのみだと普通に開いて閉じるのですが
バッチファイルからDelphiなどのソフトを呼び出して起動させる時に
起動しきってもバッチファイルは、呼び出したファイルが終了しない
限り開いたままになります。
親フォームから子フォームをshowmodalで呼び出すような感じに
なってしまいます。
バッチファイルの例からWindowsの問題なのかもしれませんが
Delphiで何かコマンドを入れる事でこれを回避できないもの
でしょうか?ご存知の方、よろしくお願いします。
> 起動方法としては、WinExecの方を使用しているのですが
CreateProcess だったら上手くいくなんて事は。
CreateProcessでも同じようです
子プロセスの作業ディレクトリがUSBディスク上のディレクトリだったりしませんか?
ソフト上で作業ディレクトリが設定できるのでしょうか?
ショートカットの中にはそういうところを見た事あるのですが
Delphiでのプログラミング時か設定でそうするのでしょうか?
普通にソフトを起動させるだけのプログラムを書いて
子プロセスにもなんの機能も持たないフォームだけのものでも
症状は出ると思われるのですが
以前から抱えてる問題なのですが、こういう事って自分だけが
経験しているものなのでしょうか?
普通ソフトは、HDD内に入れて使うものが主でしょうから
あまりこういう状況にならないのかもしれないですね。
CreateProcessならlpCurrentDirectoryで作業ディレクトリが指定できますよ。
ツイート | ![]() |