2015-05-29 117 views
0

我一直在使用威克斯开发的设置中,所有用户不可见的,它的工作原理非常适合管理login.But我想我的应用程序的所有用户,包括admin.So我已成立工作包元素中的InstallScope =“perMachine”。但为了保留一些日志,帮助文档等正在创建一个文件夹%appdata%\ ApplicatinName,并且将在我的应用程序运行时保存日志文件,但该文件夹最初将在安装过程中创建并且其工作完美管理员登录,但如果我登录到用户帐户,在用户帐户该文件夹未创建%appdata%路径。夹在维克斯安装(安装过程中创建)为

我的应用程序数据文件夹(XXX)仅是为管理员可见和不可见的其他users.How,使所有用户,包括安装在管理员同一文件夹可见。

在文件夹中,也有我的例如应用程序模板一些模板将与安装程序一起被添加为预定义模板。这些预定义的模板应该为所有用户可见时调用。除此之外,用户也可以创建将保存在同一文件夹下的模板,但用户应该只能看到预定义的模板以及该用户自己创建的模板。 (IE)他不应该能够看到一些被其它用户 问候创建 艾尔沙德

+0

如果你想编写一个共同文件夹的所有用户,尝试写入C:\程序名,而不是对应用程序数据。这可能是一个权限问题。 – user3165438

+0

@ user3165438我的要求是在我的应用程序中有一些模板,例如,一些模板将与安装程序一起添加,该安装程序称为预定义模板。这些预定义模板应该对所有用户都可见。除此之外,用户也可以创建将保存在同一文件夹下的模板,但用户应该只能看到预定义的模板以及该用户自己创建的模板。 (即)他不应该能够看到由其他用户创建的模板 – Arshad

+0

感谢您的详细信息。我知道你想为每个用户存储模板。当您安装时,仅为从其帐户安装程序的用户创建文件夹。看看这里:http://www.itninja.com/question/how-to-add-a-folder-file-to-all-users-application-data – user3165438

回答

1

我跑了测试,发现这个维克斯片段在安装用户的用户配置文件,它已成功地创建了一个文件夹中的模板的安全设置,允许其他用户访问该文件夹及其内容:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="AppDataFolder" Name="AppDataFolder"> 
    <Directory Id="MyDataRoot" Name="XXX"> 
     <Component Id="MyDataRoot" Guid="--MY GUID--"> 
     <RegistryValue Root="HKCU" Key="Software\Company\Product\SpecialFolder" Name="Installed" Type="string" Value="yes" KeyPath="yes"/> 
     <RemoveFolder Id="MyDataRoot" Directory="MyDataRoot" On="uninstall"/> 
     <CreateFolder Directory="MyDataRoot"> 
      <util:PermissionEx GenericAll="yes" User="Users"/> 
     </CreateFolder> 
     </Component> 
    </Directory> 
    </Directory> 
</Directory> 

注:

  1. 上述片段创建可由其他用户访问安装的用户的用户简档文件夹。请参阅下面有关此方法的安全影响的评论。
  2. 实际的GUID已被替换为“--MY GUID--”。
  3. <RegistryValue...>是解决错误ICE38需要:组件安装MyDataRoot到用户简档。它必须使用HKCU下的注册表项作为其KeyPath,而不是文件。
  4. <RemoveFolder...>是解决错误ICE64要求:目录MyDataRoot是在用户配置文件,但没有在RemoveFile表中列出。
  5. 我使用WIX V3.9构建安装程序包。
  6. 安装程序包已通过在Windows 8.1 64位上安装进行测试。

但是,从安全角度来看,在其他用户访问的一个用户配置文件中创建一个目录是有问题的。您是否考虑过在应用程序启动时更改应用程序以创建用户配置文件文件夹,而不是使用安装程序创建用户配置文件文件夹?

例如您的应用程序可以使用System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)来获取当前用户的应用程序数据文件夹,这个文件夹中创建子文件夹来存储您的应用程序的日志。此方法可确保应用程序的日志转到当前用户的应用程序文件夹,而不是另一个用户的应用程序文件夹。

+0

@bradfordg感谢您的答复。看看这个,让你知道..! – Arshad

+0

我也一样,只为管理员创建文件夹。对于其他用户文件夹没有创建。注意:我没有添加该注册表行(我认为它不是必要的) – Arshad

+0

在安装程序中创建用户配置文件夹,将只为安装用户创建一个文件夹(在本例中为管理员)。安装不会为任何其他用户创建文件夹。如果您希望您的应用程序日志转到用户特定的文件夹,您的应用程序应该创建所需的文件夹而不是安装程序。 – bradfordrg

相关问题