4

我的 .NET 4 应用程序尝试访问 Windows Server 2008 R2 机器上的独立存储 (GetMachineStoreForAssembly) 以获取新的“管理员”帐户时遇到了一个有趣的问题。同一台机器上的其他用户可以正常访问它。应用程序第一次在这个新帐户下运行并尝试访问 IsolatedStorage 时,它​​失败了:

    System.IO.IsolatedStorage.IsolatedStorageException: Unable to create the store directory. (Exception from HRESULT: 0x80131468)
   at System.IO.IsolatedStorage.IsolatedStorageFile.GetRootDir(IsolatedStorageScope scope, StringHandleOnStack retRootDir)
   at System.IO.IsolatedStorage.IsolatedStorageFile.InitGlobalsMachine(IsolatedStorageScope scope)
   at System.IO.IsolatedStorage.IsolatedStorageFile.GetRootDir(IsolatedStorageScope scope)
   at System.IO.IsolatedStorage.IsolatedStorageFile.GetGlobalFileIOPerm(IsolatedStorageScope scope)
   at System.IO.IsolatedStorage.IsolatedStorageFile.Init(IsolatedStorageScope scope)
   at System.IO.IsolatedStorage.IsolatedStorageFile.GetStore(IsolatedStorageScope scope, Type applicationEvidenceType)

我尝试通过 Windows 资源管理器浏览到 IsolatedStorage 文件,即 C:\

You don't currently have permission to access this folder. Click Continue to permanently get access to this folder.

当我点击 Continue 时,我们的应用程序可以毫无问题地读/写到 IsolatedStorage。

谁能解释这种行为?我们是否应该为新用户分配特定权限,以便他们可以访问独立存储?

谢谢!

4

1 回答 1

0

当我在前一个操作系统之上重新安装新的 Windows 操作系统时,我遇到了同样的行为。如果您有同样的问题,我相信如果您检查文件夹的权限(人民币点击然后“属性”菜单),您会发现未知用户的 SID(类似S-1-5-21-3626571138-2175758104-1447827851-1013)。但是这个未知用户是这个文件夹的创建者和所有者,所以你必须用自己替换所有者。所以我猜这个问题是关于NTFS而不是.NET,尽管我确信微软在目录浏览方法/对话框方面的实现仍然很差。

无论如何,您可以将孤立的 SID 替换为现有的setacl

setacl.exe -on C:\ 
           -ot file 
           -actn trustee -trst "n1:S-**old**-XXX;n2:S-**new**-XXX;ta:repltrst" 
           -rec cont
于 2014-03-21T03:59:28.373 回答