Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
Visual studio 2010 如何通过vs2010生成MSI文件,允许我的应用程序在安装在C:\Program file\myAppFolder中的客户端计算机中创建.txt文件_Visual Studio 2010_Windows Installer - Fatal编程技术网

Visual studio 2010 如何通过vs2010生成MSI文件,允许我的应用程序在安装在C:\Program file\myAppFolder中的客户端计算机中创建.txt文件

Visual studio 2010 如何通过vs2010生成MSI文件,允许我的应用程序在安装在C:\Program file\myAppFolder中的客户端计算机中创建.txt文件,visual-studio-2010,windows-installer,Visual Studio 2010,Windows Installer,我正在使用VS2010部署一个.NET应用程序。我的应用程序在与.exe相同的目录下的logs文件夹中创建.txt文件: app.exe add.exe.config logs (folder) 我使用setup project创建了一个MSI安装程序。当我安装在客户端计算机C:drive或任何驱动器中时,我创建.txt文件没有问题,但是当我安装在C:\Program file\myAppFolder或C:\Program file(x86)\myAppFolder中时,我无法创建.txt文件

我正在使用VS2010部署一个.NET应用程序。我的应用程序在与.exe相同的目录下的logs文件夹中创建.txt文件:

app.exe
add.exe.config
logs (folder)

我使用setup project创建了一个MSI安装程序。当我安装在客户端计算机C:drive或任何驱动器中时,我创建.txt文件没有问题,但是当我安装在C:\Program file\myAppFolder或C:\Program file(x86)\myAppFolder中时,我无法创建.txt文件。

为应用程序编写安装位置的设计很糟糕。最好写入
ApplicationDataFolder
ApplicationDataFolder
位于用户配置文件下,当以该用户身份运行时,应用程序将有权在其中写入@Ken White提供了一个非常好的指向


如果这是一个必须写入该文件夹的旧应用程序,则需要修改
log
文件夹上的权限,以便所有用户都可以写入该文件夹。这可以通过Windows安装程序(又名:MSI)实现,但我不确定Visual Studio安装项目是否公开了它。这是肯定的。

一篇老文章,但我最近也需要做类似的事情,所以我想它仍然有效!虽然我不提倡糟糕的设计,但在现实世界中,有时我们不得不屈从于需求

写入应用程序文件夹可能在Win7下,可以通过VS2010创建的MSI中的安装程序类进行设置。你只需要给一个相关的组(建议“用户”组,或者如果你想对谁得到什么给予更多的控制,提供一个选择屏幕)写数据访问

在路径上使用DirectoryInfo,然后可以从GetAccessControl获取安全数据。 当您知道您的组时,获取该组的SID,AddAccessRule也提供所需的ControlType值

然后使用安全数据对象对DirectoryInfo对象(SetAccessControl)设置访问控制

如果使用PrincipalSearcher进行搜索,则可以从Groups主体对象获取SID

希望这有帮助


保罗

这通常取决于:

  • 您的应用是否因其他原因需要以管理员身份运行,以及

  • 是否为有限用户提供应用程序

  • 如果应用程序出于其他原因需要提升(而不仅仅是更新受限位置的文件),那么通常的方法是在应用程序中嵌入提升清单。从安全的角度来看,这不是一件好事,但是如果您绝对需要管理员权限,那么这就是实现这一点的方法


    如果唯一需要提升的操作是更新/创建Program Files文件夹中的数据,则不要将文件放在那里。我所看到的每一个例子都是惰性编程,代码只引用文件名,因此放在ProgramFiles文件夹中(更准确地说,放在应用程序运行的同一文件夹中)。解决方法是将数据文件放在正确的位置(例如用户的应用程序数据文件夹)。正如Rob Mensching所说,只有当这是一个无法更改的遗留应用程序时,才应该更改安装文件夹的权限

    对。不要试图写入
    C:\程序文件
    。这是不允许的,因为至少是Windows Vista。(事实上,在那之前,它早在Windows XP时就被弃用了。)这里有几十篇关于应用程序应该在Windows上保存数据的帖子。对它们的搜索应该会为你找到一个。开始