none
ビルド時の不明なファイルオープンエラー RRS feed

  • 質問

  • 全てのC++ネイティブのプロジェクトにおいて、ビルド時にターゲットファイル(exe)を開くことが出来ないという、以下のようなリンクエラーを吐きます。

    エラー 1 error LNK1104: ファイル '[ターゲットファイル].exe' を開くことができません。

    VS起動直後に最初のビルドは成功しますが、その後デバッグ実行を行うとそれ以降しばらくの間前述のエラーによりビルドを完了出来ません。構成毎に最初のビルドは成功します。
    ツールによって当該ファイルの使用状況を確認しましたが、使用中のプロセスはありませんでした。
    別の場所にプロジェクトを作成しても全く同じ現象が起こります。
    標準ユーザでUACを使用していますが、特権ユーザでも同様の現象が起こります。
    関与しそうな常駐アプリケーションを終了しても同様の現象が起こりました。

    問題が発生する環境は、Windows Server 2008 R2, Visual Studio 2005 2008 2010 です。半年程ずっと正常に動いていましたが、最近この問題が現れました。発生したタイミングがはっきり分からず、原因となる操作が思い当たりません。
    考え得る原因、または究明の方法を教えて頂きたいです。

    2010年5月22日 12:21

回答

すべての返信

  • アンチウィルスソフトが影響してるってことはないですか?

    最近、変更したとか。バージョンアップしたとか。

    2010年5月22日 13:36
  • ↓ ここ、確認されました?

    リンカー ツール エラー LNK1104
    http://msdn.microsoft.com/ja-jp/library/ts7eyw4s.aspx

     「ディスク容量が足りません。」 とか...

    2010年5月22日 17:53
  • アンチウイルスソフト含む、追加した常駐アプリケーションは終了させて確認しましたが、変化ありません。
    また、分かる範囲でシステムに不要なサービスを停止して確認しても同様でした。
    2010年5月22日 19:24
  • 自分なりに確認したところでは該当する項目はありませんが、原因になりそうな項目は、ファイルが開かれている可能性とアクセス権です。
    別のプログラムでファイルが開かれている可能性は先に、示したようにファイルをハンドルしているプロセスを調べるツールによって確認しました。
    http://technet.microsoft.com/ja-jp/sysinternals/bb896655.aspx
    アクセス権については、ユーザディレクトリ下でありフルアクセス権限を持っています。特権ユーザも同様です。
    2010年5月22日 19:24
  • 「その後デバッグ実行を行うと」という記述が気になります。

    なんらか実装の問題により、プログラムが終了していないのではありませんか?

    実行中のプログラム(exeファイル)は書き換えることができません。

    2010年5月22日 22:59
  • 実装の問題とは書いたプログラムの内容の事ですか?先に「全ての」と示したように既存のプロジェクトに関しても起こりますが、新規に空のWin32コンソールプロジェクト"Test"を作成し、以下のようなソースファイルを一つだけ追加した状態でビルドを試行しています。

    // main.cpp
    int main(){ return 0; }

    このプロジェクトをデバッグ実行し、止めた時と終了後のプロセスは次のような状態です。このとき終了後には先の問題が発生しています。

    C:\>tasklist /fo list /fi "imagename eq Test*"
    
    イメージ名:     Test.exe
    PID:         1728
    セッション名:    Console
    セッション#:     1
    メモリ使用量:    2,220 K
    
    C:\>tasklist /fo list /fi "imagename eq Test*"
    情報: 指定された条件に一致するタスクは実行されていません。
    2010年5月23日 5:19
  • 問題の原因が Visual Studio の中にあるのか外にあるのかを切り分けるというのはいかがでしょうか。

    ・ビルドがエラーになる状態で、対象の .exe をエクスプローラー上で削除してみる。
    (Visual Studio は起動したままにしておいて、エクスプローラー上で削除できたらビルドしてみる。)
    ・ビルドがエラーになる状態で、Visual Studio を一旦終了し、再起動してからビルドしてみる。
    2010年5月23日 11:40
  • ・ビルドがエラーになる状態で、対象の .exe をエクスプローラー上で削除してみる。
    (Visual Studio は起動したままにしておいて、エクスプローラー上で削除できたらビルドしてみる。)

    手動で削除出来ます。その後ビルドは成功しました。

    ・ビルドがエラーになる状態で、Visual Studio を一旦終了し、再起動してからビルドしてみる。

    再起動後ビルドは失敗しました。

    試しにプロジェクトのリンク前ビルドイベントにターゲットファイルの削除コマンドを入れてみましたが、成功しませんでした。Visual Studioのプロセスに何らかの制約が掛かってしまっているということでしょうか?

    2010年5月23日 11:52
  • もう一つ、試してみる観点としては、プロジェクトやソリューションの置き場所(フォルダ)でしょうか。
    たとえば、今ドキュメントフォルダ以下に配置しているのであれば、ルートドライブにフォルダを作って、そこで作成した場合は挙動に差があるかどうかを見るとか。

    Visual Studio を再起動してもエラーになるというのであれば、ファイルシステムが要因か、ファイルの書き換えができないような制約・破損などが発生しているかになるとは思います。
    なので、ファイルシステム面の切り分けと言うことで、配置しているフォルダを変えてみる(違った特性を持つ場所に置いてみる)を提案しました。

    ※出力先フォルダが、ソリューションフォルダ以下になっていることを前提で記述しています。異なる場合は、出力先フォルダを変えてみるという風に読み替えてください。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年5月23日 15:03
    モデレータ
  • 異なるドライブ上(NTFS),ルート直下,FAT32ドライブ上(ACL制約無し)などで試してみましたが、変化ありません。ドライブは全てその前にファイルシステムチェックを掛けました。

    ついでにVS2010を修復インストールした上で試しましたがこれも変わりませんでした。

    2010年5月23日 23:47
  • これまでのやり取りからするとお使いのPCの環境が問題なのではないかと言う気がします。

    言われている状況は特定のマシンでしか起こらないのではないでしょうか?
    実際に同じような事があちらこちらで起こっていれば、ネット上でももっと話題になりそうな気がします。

    全く別のPCにVisualStudio2010をインストールした場合に同じ問題が起こらないのであれば、
    そのPCの問題としか思えません。
    クリーンインストールし直したら直るという類の問題ではないかと言う気がします。

    何かを追加インストールしてからおかしくなったというような事はないでしょうか?

     


    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    2010年5月24日 9:34
  • ようするに、
     1.*.exeがあるとlinkできない
     2.手動で当該の*.exeを削除すると、ビルド可能になる
    ということでしょうか。その場合で、

    1.プロジェクトのプロパティの「ビルド前のイベント」又は「リンク前のイベント」に、
      当該exeの削除を実行させ、イベントの実行に成功し、ビルドも成功するか調べてみたらどうでしょう。

    上記イベントの実行に失敗するようだと、リンカーが当該exeのオープン(クリエイト)にも
    失敗すると思われます。この場合、やはりUACが疑わしいと思われます。
    つまり、「存在しないファイルをクリエイトはできるが、既存のEXEファイルを書き換えられない」
    状態になっているのかもしれません。

    2010年5月25日 11:42
  • 仰る「PCの環境」がどの範囲の事を示しているのか分かりませんが、環境下に何らかの問題が発生しているのは間違いありません。特定のマシンでしか起こらない状況とは例えばどの様な原因が考えられますか?

    クリーンインストールすれば直るとは思いますが、まとまった時間が取れず、あらゆるセットアップを完了するまで他の作業に支障を来すため、暫くの間その手段を取れません。

    初めに記したように、発生したタイミングがはっきり分かりませんが、インストール日で確認する限り最近インストールしたのはMaximaや7-Zipなどのスタンドアロンアプリケーションばかりでした。Visual Studioの拡張機能は問題の発生後全てアンインストールしました。

    • 編集済み sulume 2010年5月25日 16:29 不要な文章の省略
    2010年5月25日 13:41
  • 1.プロジェクトのプロパティの「ビルド前のイベント」又は「リンク前のイベント」に、
      当該exeの削除を実行させ、イベントの実行に成功し、ビルドも成功するか調べてみたらどうでしょう。

    前述しましたが、イベントが実行を試しても削除されず、またビルドも失敗します。

    上記イベントの実行に失敗するようだと、リンカーが当該exeのオープン(クリエイト)にも
    失敗すると思われます。この場合、やはりUACが疑わしいと思われます。
    つまり、「存在しないファイルをクリエイトはできるが、既存のEXEファイルを書き換えられない」
    状態になっているのかもしれません。

    特権ユーザでも同じ現象が起こる場合、どのように対処または確認すればよいでしょうか?

    追記です。
    以前ツールによって当該ファイルの使用状況を確認し、使用中のプロセスは無かったと言いましたが、また別のツールにて同様の確認をしたところSystemプロセスがロックしているとの表示がありました。システムスレッドがファイルをロックするというとデバッグ関連の原因ではないかと思います。確認のためRelease構成で試したところ、ブレークポイントを付けた時のみ問題が発生しました。

    また、ネットワーク付きのセーフモードで試したところ、問題は発生しませんでした。そのとき実行されていなかったサービス一覧を元に標準モードで起動直後の状態からサービスを停止させて行ったところThemeを停止させたところで問題が発生しなくなりました。しかし、再度起動直後の状態からThemeのみを停止させても、問題は発生しました。

    引き続きこれらのことから分かる事はないでしょうか?


     

    2010年5月25日 13:44
  • う~ん
    デバッガでexeを実行すると、そのexeがSystem権限に昇格したままになっちゃう
    って事なのかもしれません。

    この辺になると自分はあまり詳しくないので、適切な発言ができそうもありません。
    誰か宜しくお願いしますm(__)m。

    2010年5月26日 3:32
  • 以前ツールによって当該ファイルの使用状況を確認し、使用中のプロセスは無かったと言いましたが、また別のツールにて同様の確認をしたところSystemプロセスがロックしているとの表示がありました。システムスレッドがファイルをロックするというとデバッグ関連の原因ではないかと思います。確認のためRelease構成で試したところ、ブレークポイントを付けた時のみ問題が発生しました。

    また、ネットワーク付きのセーフモードで試したところ、問題は発生しませんでした。そのとき実行されていなかったサービス一覧を元に標準モードで起動直後の状態からサービスを停止させて行ったところThemeを停止させたところで問題が発生しなくなりました。しかし、再度起動直後の状態からThemeのみを停止させても、問題は発生しました。

    引き続きこれらのことから分かる事はないでしょうか?

    うーん、引っかかるのは半年間ほどは正常に動いていたと言う事実です。
    初めから現象が起こっていたわけでは無いという事からPC内の設定等に変更が行われたのではないかと
    思います。但し、どういう変更が起こったのかと聞かれると答えられませんが。
    VisualStudioを入れなおしても同じ現象が起こるのであれば、OS側の設定が原因なのではないかと
    と思うのですが、何か心当たりはないでしょうか。

    上記の話の中でThemeのみでは解決しなかったと言う事から、一つのサービスのみが原因と言うわけではなくて
    幾つかの条件の組合せなのではないかと思いますけれど、当然、ご自身も同じ結論に達していると思いますから
    新しい情報は提供出来そうにないです。
    未だにXPで開発しているのでUAC関連が開発環境に影響を及ぼすようなケースに出会っていないのです。

     


    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    2010年5月26日 5:58
  • 手元の環境で再現できていないので確証は持てないですが、ダメ元で。

     Can't delete EXE files in Vista / Windows 7 (SOLVED)
     http://www.retrocopy.com/blog/28/cant-delete-exe-files-in-vista--windows-7-solved.aspx
    • 回答としてマーク sulume 2010年5月26日 12:38
    2010年5月26日 6:17
  • 当たり前すぎて誰も触れてないのかもしれませんが
    単語検索して誰も発言してないようなので、一応確認ですが

    「リビルド」や「クリーン」はどうなりますか?

    また、半年ほどは問題なく、最近おきたのであれば
    VS2010をβから製品版にかえたあたりから問題がおきたのでしょうか?

    2010年5月26日 7:37
  • 手元の環境で再現できていないので確証は持てないですが、ダメ元で。

    Can't delete EXE files in Vista / Windows 7 (SOLVED)
    http://www.retrocopy.com/blog/28/cant-delete-exe-files-in-vista--windows-7-solved.aspx

    症状も発症環境もドンピシャでした。当方のOSの性質上セキュリティ構成やポリシーなどの設定によって意図せずサービスを無効にしてしまった可能性があります。参照先に従って、サービスApplication Experienceを有効(手動)にしたところ、問題は発生しなくなりました。

    問題は解決しました。ありがとうございました。

    2010年5月26日 12:38
  • 無事解決しました。助言ありがとうございます。

    因みに、VS2010固有の問題ではなく、VS2005,VS2008も同様の症状が発生していました。またVS2010は製品版から使用しました。

    2010年5月26日 12:40