クライアントアプリケーションが読み取りおよび表示するために共有メモリ内のフィールドを更新するには、私のサービスが必要です。私はSession 0 Isolationのために私の現在の解決策が無効であることを発見しました。Windowsサービスとアプリケーションの間でメモリを共有すると、最も簡単なのは何ですか?
私は、その要素を修正し、グローバル名前空間でmutex
ESの名前を変更しましたが、DLLは従順になるかのように、セッション0分離されることに一つの解決策にもかかわらず、セッション間で共有することを見ていない:
" イベントやマップされたメモリのような、名前付きオブジェクトのローカル\またはグローバル\名前空間を明示的に選択してください。
dllのどの部分が名前付きオブジェクトとして分類されているか分かりませんし、再インストールして確認するまでには時間がかかりすぎます。
名前付きチャネルのコードボリュームがわかりました。 memoryMappedFileソリューションに必要とされるディスクに触れるファイルを作成したくありません。 DLLの共有セクションを動作させることはできますか?さもなければ、最も簡単なのは何ですか?
public ref class ServerGUIBridge
{
public:
#pragma data_seg(".sdata")
static int commonIntShouldBeGlobal = 0;
static bool hasBeenInitializedMakeMeGlobal = false;
#pragma data_seg()
#pragma comment(linker, "/section:.sdata,rws")
私は.NET 2.0を使用していますので、WCFは必要ありません。
メモリマップファイルをINVALID_FILE_HANDLEで作成すると、ファイルは作成されません。しばらくの間アクセスされないと、ページアウトされるメモリです。共有セクションはセキュリティホールであることに注意してください。共有セクションにACLを置くことはできません。 (クライアントが入り、 'hasBeenInitializedMakeMeGlobal = false'または' commonIntShouldBeGlobal = rand() 'を実行するとどうなるか) –
@Raymond" hFileがINVALID_HANDLE_VALUEの場合、呼び出しプロセスはファイルマッピングオブジェクトのサイズをdwMaximumSizeHighこのシナリオでは、CreateFileMappingは、ファイルシステム内のファイルではなく、システムページングファイルによってサポートされる、指定されたサイズのファイルマッピングオブジェクトを作成します。 - システムページングファイルがオフの場合、どこにバックアップされますか? – John
「システム・ページ・ファイルによってバックアップされました」は表現が貧弱です。それは実際には「仮想メモリシステムによってバックアップされる」べきである。ページファイルが無効になっている場合、仮想メモリシステムは物理メモリに過ぎません。 –