ホームページ  >  記事  >  バックエンド開発  >  CreateProcessAsUserW() を使用してサービスから起動すると、WerFault の不整合が原因で Windows 電卓アプリケーションがクラッシュする

CreateProcessAsUserW() を使用してサービスから起動すると、WerFault の不整合が原因で Windows 電卓アプリケーションがクラッシュする

PHPz
PHPz転載
2024-02-05 22:51:071155ブラウズ

使用 CreateProcessAsUserW() 从服务启动时,Windows 计算器应用程序会因 WerFault 不一致而崩溃

質問の内容

Windows サービスは Go で書かれており、CreateProcessAsUserW() を使用してユーザー コンテキストで計算機を作成しようとしています。プロセス。

そのコードは次の要点からインスピレーションを得ています:

https://gist.github.com/LiamHaworth/1ac37f7fb6018293fc43f86993db24fc#file-native-go

ほとんどの場合、電卓アプリケーションはアクティブ ユーザーで起動しますが、場合によっては、CreateProcessAsUserW() がエラーを返さずにアプリケーションが起動できないことがあります。

Procmon を使用した検査により、電卓アプリケーションの起動時にアプリケーションがクラッシュし、WerFault ダンプを収集する必要があることが判明しました。残念ながら、イベント ログには詳細なダンプが表示されません。

ProcMon で観察された WerFault クラッシュ

CreateProcessAsUserW を使用して 3 つの同様の電卓アプリケーションを起動した詳細なスタック トレース - 最初の 2 つは成功し、3 つ目は失敗します

このエラーは本質的にランダムであり、アプリケーションの信頼性を保証しません。ここから何を/どのようにデバッグするかについては非常に無知なので、助けていただければ幸いです。


正解


このエラーは、x64 で作成されたバイナリが arm64 で実行される間違ったコンパイル環境が原因で発生するようです。皆様のご意見ありがとうございます

以上がCreateProcessAsUserW() を使用してサービスから起動すると、WerFault の不整合が原因で Windows 電卓アプリケーションがクラッシュするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。