Windows中是否有共享文件夹,非高级用户有写入权限?

我知道commonappdata(所有用户)可以保存系统范围的应用程序设置,但在Vista / 7下,非提升用户无法写入该目录。

是否有用户共享的文件夹,任何非pipe理员用户都可以写入?

这就是为什么我需要这个:我的应用程序安装在PF目录由一个Inno安装程序安装程序与提升的权利。 然后,当实际的非pipe理员用户运行该程序时,它会使用另一个未升级的Inno Setup安装程序将其设置复制到用户的AppData目录中。 在卸载程序(由具有pipe理员权限的系统范围安装程序启动)时,我想从每个用户的AppData目录中卸载程序的文件。

我可以想到两个解决scheme:1.获取Windows用户列表并遍历其AppData目录(似乎太复杂)2.在上述常用用户数据目录中存储卸载程序的path。

有任何想法吗?

谢谢!

Windows XP中的“共享文档”目录

C:\Documents and Settings\All Users\Documents 

要么,

 %ALLUSERSPROFILE%\Documents 

Vista / 7中的相应目录

 C:\Users\Public 

要么,

 %PUBLIC%\Documents 

但是,您真正需要的是FOLDERID_PublicDocuments (传统CSIDL_COMMON_DOCUMENTS )的KNOWNFOLDERID值。 SHGetFolderPath函数然后可以得到你的路径。

或者一个更简单的VBScript替代方案,但我不知道跨操作系统版本的可靠性如何:

 Const CSIDL_COMMON_DOCUMENTS = &h2e Set oShell = CreateObject("Shell.Application") Wscript.Echo oShell.Namespace(CSIDL_COMMON_DOCUMENTS).Self.Path 

我认为NameSpace不接受这个特定的常量 。 所以你可能可以采取COMMONAPPDATA = &H23 ,然后使用其父。 但是这不是很干净或国际化:

 Wscript.Echo oShell.NameSpace(&h23).ParentFolder.Self.Path & "\Documents" 

但是,既然你使用的是Inno Setup,你应该真的使用{commondocs} Shell Folder Constant来让自己变得简单。

C:\ Users \ Public下的东西是否符合您的需求?

用户拥有文档文件夹。 除了文件被复制,移动,删除或编辑与另一个程序,如果你把东西在那里,由于对用户的可见性。

我建议您在安装程序中的公用应用程序数据(CSIDL_COMMON_APPDATA或FOLDERID_ProgramData)下创建一个文件夹,并使用允许所有人访问的安全描述符。

例如

 [Dirs] Name: "{commonappdata}\productname";Permissions:everyone-modify; 

解决方案1对我来说看起来很合理。 因此,每个用户都可以控制他们的安装,并且控制中央共享安装。

对于解决方案2,您可以在一个定义良好的位置创建一个允许写入的文件夹,以便安装人员知道该文件夹,或使用注册表项来达到同样的目的。 但请记住,这可能会造成安全漏洞,因为任何人都可能篡改其他用户的卸载路径。