WinXP和WinVista中都存在一个所有用户都具有写权限的文件夹吗?

时间:2020-03-05 18:58:29  来源:igfitidea点击:

我们有一个NET应用程序,该应用程序已安装到Program Files文件夹中。
该应用程序本身会写入一些文件,并在其应用程序文件夹中创建一些目录。
但是,当普通Windows用户尝试使用我们的应用程序时,它会崩溃,因为该用户无权写入应用程序文件夹。
WinXP和WinVista中是否都存在所有用户默认都具有写权限的文件夹?所有用户文件夹还是类似的东西?

解决方案

回答

我不确定是否所有非管理员用户都具有写入权限的单一路径。

我认为正确的应该是<User> \ Application Data

回答

没有这样的文件夹。

但是我们可以创建一个。

在Vista中有CSIDL_COMMON_APPDATA映射到%ProgramData%(c:\ ProgramData),在XP中有CSIDL_COMMON_APPDATA映射到c:\ Documents and Settings \ AllUsers \ Application Data

随时在安装程序中创建一个文件夹并设置ACL,以便每个人都可以写入该文件夹。

请记住,COMMON_APPDATA是在通用控件库的版本5中实现的,这意味着它在Windows 2000及更高版本中可用。在NT4中,我们可以在安装目录中以及Windows 98及以下版本中创建该文件夹,因为这些系统始终没有权限系统,因此无论如何都没有关系。

这是一些创建该文件夹的示例InnoSetup代码:

[Dirs]
Name: {code:getDBPath}; Flags: uninsalwaysuninstall; Permissions: authusers-modify

[Code]

function getDBPath(Param: String): String;
var
   Version: TWindowsVersion;
begin
  Result := ExpandConstant('{app}\data');
  GetWindowsVersionEx(Version);
  if (Version.Major >= 5) then begin
    Result := ExpandConstant('{commonappdata}\myprog');
  end;
end;