我有一个用来与其他进程进行通信的共享内存在Windows控制台应用程序,我需要从托管同一台机器上的Web服务这一过程中分享数据。
当我使用Visual Studio开发服务器一切工作正常,但我找不到文件错误(代码2)当我尝试打开从Web服务应用程序的内存映射文件IIS 6.1上。
这些是创建和打开内存映射文件的功能,我觉得IIS使用不同的内存空间,有可能吗?
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern IntPtr CreateFileMapping(IntPtr hFile, IntPtr lpFileMappingAttributes, FileMapProtection flProtect, uint dwMaximumSizeHigh, uint dwMaximumSizeLow, [MarshalAs(UnmanagedType.LPTStr)] string lpName);
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr OpenFileMapping(uint dwDesiredAccess, bool bInheritHandle, string lpName);
使用Process Explorer中,我可以看到控制台应用程序正确地创建一个内存映射文件,下:
\Sessions\1\BaseNamedObjects\filemapname
相同的路径我有当Visual Studio开发服务器上运行的Web服务,但是当IIS下运行看不到任何通道。 如果我“OpenFileMapping”后运行“GetLastError函数”功能,我有错误代码2,是否意味着找不到文件。
编辑:
阅读一些类似的问题,我尝试重命名内存映射文件,以“全球\ filemapname”在控制台应用程序,IIS下现在的Web服务可以读取该文件,但现在我有ERROR_ACCESS_DENIED,所以我觉得IIS进程需要更多的权限。
我尝试修改一些IIS选项,我赢了,当默认应用的变化标识(默认为ApplicationPoolIdentity)机器的管理员用户。
使用此设置应用IIS下正常工作,但也许这是不是更好和干净的解决方案。 任何建议?