0

Windows で外部 DLL を使用するアプリケーション (sample.exe) を実行しています (つまり、この DLL のソースを持っていません)。外部 DLL は、%appdata%フォルダー内にいくつかのデータを生成します。アプリケーションをスタンドアロンで実行すると、すべてが正常に実行されます。

ここで、MPI を使用して sample.exe を実行すると、ログが生成されます。"C:\Windows\System32\config\systemprofile\AppData"

これはSYSTEM%appdata%用であることを理解しています。また、MPI は管理者としてインストールする必要があるサービスを使用して実行します。したがって、おそらく sample.exe はユーザーではなくシステムによって所有されていると思いました。ただし、タスク マネージャから確認すると、アプリケーションの所有者はまだ user( ) です。"smpd"%username%

ユーザーのappdataフォルダーではなく、システムのappdataフォルダーにログが生成される理由がわかりません。

4

3 に答える 3

1

可能性のある説明は、LOCALSYSTEM アカウントで実行されているサービスがファイルを保存していることです。アプリケーションのアーキテクチャについてほとんど知らないため、これがどのように行われるかについて詳しくは言えません。

于 2013-01-18T11:42:25.427 に答える
1

は独自のアプリケーションであるためsample.exe、ロギング コードを追加して問題をトラブルシューティングできます。例えば:

  • SHGetKnownFolderPath を呼び出して、アプリケーション データ フォルダーを特定します。
  • GetUserName を呼び出して、実行しているユーザー アカウントを確認します。
  • GetEnvironmentStrings を呼び出して、%APPDATA% と %LOCALAPPDATA% に特に注意しながら、環境変数がどのように設定されているかを確認します。
  • これが C プログラムの場合は、getenv("APPDATA") と getenv("LOCALAPPDATA") も使用します。IIRC (C ランタイム ライブラリ) は、環境変数の独自のコピーを保持します。

アプリケーション データ フォルダは正しいが、環境変数がそうでない場合 (これが問題に関する私の最初の推測です)、SetEnvironmentVariable および/または _putenv を使用して、外部ライブラリをロードする前にパスを修正してみてください。

于 2013-01-20T20:46:20.910 に答える
0

これは、Windows サービスが「ローカル システム アカウント」で実行されているためです。サービスのプロパティと [ログオン] タブに移動します。ローカル システム アカウントから「このアカウント」に変更し、資格情報を入力します。いいえ、サービスはユーザー アカウントで実行し、ユーザーの AppData を使用する必要があります。

于 2019-04-26T18:40:48.563 に答える