Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows中是否有非提升用户具有写入权限的共享文件夹?_Windows_Installation_Uac_Inno Setup_Appdata - Fatal编程技术网

Windows中是否有非提升用户具有写入权限的共享文件夹?

Windows中是否有非提升用户具有写入权限的共享文件夹?,windows,installation,uac,inno-setup,appdata,Windows,Installation,Uac,Inno Setup,Appdata,我知道commonappdata(所有用户)可以保存系统范围的应用程序设置,但在Vista/7下,非提升用户不能写入该目录 是否有一个在用户之间共享且任何非管理员用户都可以写入的文件夹 这就是为什么我需要这个: 我的应用程序由Inno安装程序以提升的权限安装在PF目录中。然后,当实际的非管理员用户运行该程序时,它会使用另一个非提升的Inno安装程序将其设置复制到用户的AppData目录。卸载程序后(由具有管理员权限的系统级安装程序启动),我想从每个用户的AppData目录卸载程序文件 我可以想出

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

是否有一个在用户之间共享且任何非管理员用户都可以写入的文件夹

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

我可以想出两种解决办法: 1.获取Windows用户列表并遍历他们的AppData目录(似乎太复杂了) 2.将卸载程序的路径存储在上述公共用户数据目录中

有什么想法吗


谢谢

解决方案1在我看来非常合理。因此,每个用户都可以控制自己的安装,而且只能控制自己的安装,而您可以控制中央共享安装


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

是否符合Windows XP中C:\users\Public\quality to your need?

的“共享文档”目录

C:\Documents and Settings\All Users\Documents
或者

Vista/7中相应的目录

C:\Users\Public
或者

但您真正想要的是
FOLDERID\u PublicDocuments
(legacy
CSIDL\u COMMON\u DOCUMENTS
)的价值。然后,该函数可以获取路径

或者更简单的VBScript替代方案,但我不确定跨操作系统版本的可靠性:

Const CSIDL_COMMON_DOCUMENTS = &h2e 
Set oShell = CreateObject("Shell.Application")
Wscript.Echo oShell.Namespace(CSIDL_COMMON_DOCUMENTS).Self.Path
我认为他不接受那个特殊的要求。因此,您可以选择
COMMONAPPDATA=&H23
,然后使用它的父对象。但这不是很干净或国际化:

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

但是,既然您使用的是Inno设置,那么您就应该真正使用{commondocs},并让自己更轻松。

用户拥有文档文件夹。由于用户的可视性,如果您将文件放在其他程序中,则需要使用其他程序复制、移动、删除或编辑文件

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

例如


但是我如何实现解决方案2呢?Windows下的路径在哪里,它独立于userappdata目录,并且普通非提升用户对其具有写访问权限?您的安装程序以管理员权限运行,可以创建这样的文件夹,它有足够的权限这样做。可能这一定是公共(管理运行)安装文件夹中的某个子文件夹。你能告诉我他们在实践中如何做到这一点吗?我想即使我这样做,安装程序也必须遍历所有用户帐户,并逐个授予它们权限?:-)或者,只需将此文件夹的写入权限授予“用户”组(或者他们称之为每个有效交互用户所属的组)。这是我最初的想法。谢谢,但我仍然不知道如何从我的程序中授予权限,你能给我指一些示例代码吗?这不是只在Vista和更高版本上可用吗?我也需要一个XP的解决方案@史蒂夫:我相信XP在我的电脑里有一个共享文档文件夹,不知道它的完整路径是什么。它用于多用户本地访问。
Const CSIDL_COMMON_DOCUMENTS = &h2e 
Set oShell = CreateObject("Shell.Application")
Wscript.Echo oShell.Namespace(CSIDL_COMMON_DOCUMENTS).Self.Path
Wscript.Echo oShell.NameSpace(&h23).ParentFolder.Self.Path & "\Documents"
[Dirs]
Name: "{commonappdata}\productname";Permissions:everyone-modify;