none
アプリケーションが32bitで起動したり64bitで起動したりする RRS feed

  • 質問

  • お世話になります。

    以下環境にてアプリケーションを実行すると、プロセスの起動状態が32bit起動になったり64bit起動しており、原因が分からずに困っております。

    --------------------------------------------------------------------------------------------------------

    OS

    Windows Server 2012 R2

    アプリケーション

    VB.net(VS2012)にて「Any CPU、32bit優先なし」を設定しビルドした実行ファイル

    実行方法

    上記のアプリケーションを実行するスクリプトファイル(JScript)を作成し、スタートアップに配置してログオン時に起動する。

    スクリプトファイルはWindows Script Encoderを用いてエンコード処理を実施。

    アプリケーションの実行はWScript.ShellオブジェクトのRunメソッドを使用。

    --------------------------------------------------------------------------------------------------------

    64bit起動が正常動作なのですが、稀に32bitで起動してアプリケーションが動かなくなります。(起動状態はタスクマネージャにて確認)

    少ない情報で申し訳ないですが、32bitで起動してしまう原因について、何か心当たりのある方はいらっしゃいますでしょうか。

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




    • 編集済み まさん 2016年1月27日 10:49
    2016年1月27日 10:42

回答

  • まさん さん、

    可能なら・・・
    「x64」 でビルドして、Windows Server 2012 R2 で実行し、
    その結果を 「Any CPU 32bit 優先」でビルドされた場合と比較なさってはいかがでしょう?

    # サーバー用で、(たぶん)社内/特定ユーザー用でしょうから、
      コンパイルオプションを変更して運用しても問題なし・・・だろう、と思って書きました。

    以上です。


    2016年1月27日 11:39
  • まさん 様

    しつこくて申し訳ありません。

    リビルド等を避けたい(現在のアプリケーションのままで使いたい)ということで、かつ遅延起動が必要ならば、タスクスケジューラの利用はとても良いアイデアだと思います。

    が、タスクスケジューラーによる実行でも、スクリプトを利用した実行と同じ結果になる可能性があると思います。

    動作OSが Windows Server 2012 R2 であるところから、コンパイルオプションで対象の CPU を「x64」に決めうちしてはダメなのでしょうか?

    いずれの方法を採られるにせよ、成功をお祈りいたします。

    以上

    2016年1月28日 7:15

すべての返信

  • まさん さん、

    可能なら・・・
    「x64」 でビルドして、Windows Server 2012 R2 で実行し、
    その結果を 「Any CPU 32bit 優先」でビルドされた場合と比較なさってはいかがでしょう?

    # サーバー用で、(たぶん)社内/特定ユーザー用でしょうから、
      コンパイルオプションを変更して運用しても問題なし・・・だろう、と思って書きました。

    以上です。


    2016年1月27日 11:39
  • Ashidacchi様

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

    おっしゃる通り特定ユーザ用のシステムです。

    対応策はご提案頂いた方法など案はありまして、改善の兆しも見えてはいるのですが、原因がさっぱりなのです・・・

    私の認識では「Any CPU 32bit優先なし」でビルドしたアプリケーションを64bit環境で起動すれば通常は64bit起動するものだと認識しております。調査している中で32bitコンソールを立ち上げてアプリケーションを実行したり、CorFlagsセクションを書き換えれば32bit起動するようですが、そういったことも一切しておりません・・・

    現状、スクリプトを手で実行すると32bit起動することはなく、あくまでスタートアップ時のみの症状となっております。

    少々お手上げな状態です・・・


    • 編集済み まさん 2016年1月28日 1:40
    2016年1月28日 1:37
  • まさん 様、

    「Any CPU 32bit優先なし」でビルドしたアプリケーションの動作については、私も同じ認識です。

    「上記のアプリケーションを実行するスクリプトファイル(JScript)を作成し、スタートアップに配置してログオン時に起動する。」と書かれていますが、実行に際しての条件があるのでそのような実行手段になっているのでしょうか?
    単純にスタートアップにショートカットを配置するのではダメなのでしょうか?

    すみません。
    原因究明よりも安定稼働(結果オーライ)を優先して考えています・・・

    以上
    2016年1月28日 1:49
  • Ashidacchi様

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

    スクリプトを利用している理由ですが、過去の遺物で、作成した明確な意図は分からない状況です・・・

    スクリプト自身で行っている処理は、「一定時間スリープしてからアプリケーションを実行する」となっております。

    恐らく遅延起動が目的で作られたものだと思います。

    このスクリプトも怪しいなと踏んでおりまして、Ashidacchi様が仰るようにスクリプトの利用を廃止し、単純にアプリケーションのショートカットを配置する対応でも大丈夫だろうと考えております。ただし遅延起動させる必要があるため、スタートアップではなくタスクスケジューラーを利用しようと検討中です。

    アプリケーションのビルド方法がまずいのか、スクリプトの利用がまずいのか、スタートアップの起動方法がまずいのか、少しでも手がかりがあれば良いのですが、悩ましい問題です・・・



    • 編集済み まさん 2016年1月28日 9:27
    2016年1月28日 6:48
  • まさん 様

    しつこくて申し訳ありません。

    リビルド等を避けたい(現在のアプリケーションのままで使いたい)ということで、かつ遅延起動が必要ならば、タスクスケジューラの利用はとても良いアイデアだと思います。

    が、タスクスケジューラーによる実行でも、スクリプトを利用した実行と同じ結果になる可能性があると思います。

    動作OSが Windows Server 2012 R2 であるところから、コンパイルオプションで対象の CPU を「x64」に決めうちしてはダメなのでしょうか?

    いずれの方法を採られるにせよ、成功をお祈りいたします。

    以上

    2016年1月28日 7:15
  • Ashidacchi様

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

    コンパイルオプションで対象の CPU を「x64」に決めうちすると、アプリケーションの動作検証が必要となってくるため

    可能であれば避けたいと考えております。原因が「Any CPU」にあることが判明すれば、やらざるを得ないのですが・・・

    恐らく原因が判明することはないとは思いますが、分かり次第改めてご報告いたします。

    色々とご対応頂きありがとうございました。


    • 編集済み まさん 2016年1月28日 7:52
    2016年1月28日 7:51
  • こんにちは。

    こちらその後、進展はございましたか?

    Ashidacchi様のご回答が一番的確なように思われましたので「回答の候補に設定」させていただきました。

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


    コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。

    2016年3月28日 3:39