質問する質問する
 

回答済みCOMの解放

  • 2009年8月27日 0:08OTAKA ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    お世話になっております。

    new-object -com xxx.yyy とCOMのインスタンスの生成を行っているのですが、
    解放の仕方がわかりません。

    ActiveXのデバックにpowershellを利用しているのですが、POWERSHELLを終了するまで掴まれているため
    コンパイルする前にPOWERSHELLを再起動する必要があって面倒なのです。ヒストリも消えますし・・・

    解放する方法を教えていただけませんでしょうか。
    よろしくお願いします。

回答

  • 2009年8月27日 14:28AzuleanMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    PowerShell に限った話ではありませんが、.NET Framework の CLR によって自動的に読み込まれた DLL/OCX はなかなか解放されません。
    (もしかしたら、プロセス終了まで解放されないかもしれませんが、未確認です)
    このため、PowerShell を再起動する以外には手がない可能性があります。

    PowerShell でやることが決まっているのであれば、ファイルに書き出しておいて、それを実行する形を取った方がよいかもしれません。
    -noexit と組み合わせるとまだ道が見えるかもしれませんが、PowerShell に明るくないので、的を外しているかも。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマークOTAKA 2009年8月28日 0:14
    •  

すべての返信

  • 2009年8月27日 1:51HIROsDotNetMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     コードあり

    こんにちは

    [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject(解放したいオブジェクト)
    では、どうでしょうか?
  • 2009年8月27日 5:27OTAKA ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    ご返答ありがとうございます。

    結果、だめでした。

    ちなみに、再度の解放したいオブジェクトのアクセスを試みると下記のメッセージが表示されました。

    COM オブジェクトがリリースされた後に、そのオブジェクトにアクセスが行われました: 基になる RCW から分割された COM オブジ
    ェクトを使うことはできません。


  • 2009年8月27日 14:28AzuleanMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    PowerShell に限った話ではありませんが、.NET Framework の CLR によって自動的に読み込まれた DLL/OCX はなかなか解放されません。
    (もしかしたら、プロセス終了まで解放されないかもしれませんが、未確認です)
    このため、PowerShell を再起動する以外には手がない可能性があります。

    PowerShell でやることが決まっているのであれば、ファイルに書き出しておいて、それを実行する形を取った方がよいかもしれません。
    -noexit と組み合わせるとまだ道が見えるかもしれませんが、PowerShell に明るくないので、的を外しているかも。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマークOTAKA 2009年8月28日 0:14
    •  
  • 2009年8月28日 0:13OTAKA ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ご返事ありがとうございます。

    何か方法を考えてます。

    ありがとうございました。