2015-05-01 67 views
0

安装后的应用程序提供了错误Acess Denied。读取和写入文件。格兰特阅读权限

拒绝访问该文件PathName\\BLsms.ocx

这里PatheName是完整路径。

Advance安装程序用于创建安装程序。

然后应用程序安装在C Drive

如何让这些文件可读写?

我正在使用此代码。

try 
{ 

    this.brlmfc = new BinaryReader(new FileStream("BLsms.ocx", FileMode.Open, FileAccess.ReadWrite,FileShare.Read)); 
    this.brocx = new BinaryReader(new FileStream("BLrpi.lfc", FileMode.Open,FileAccess.ReadWrite)); 

    this.brlmc = new BinaryReader(new FileStream("rpcgh.lfc", FileMode.Open,FileAccess.ReadWrite)); 
    this.passkey1 = this.brlmfc.ReadString(); 
    this.passkey2 = this.brocx.ReadString(); 

    this.passkey3 = this.brlmc.ReadString(); 

} 
catch (Exception e13) 
{ 
    MessageBox.Show(e13.Message); 
    i = 0; 
} 

我也尝试了下面的代码在Form Load方法中。

FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.AllAccess, Application.StartupPath+"\\BLsms.ocx"); 
f2.AddPathList(FileIOPermissionAccess.Read, Application.StartupPath+"\\BLrpi.lfc"); 
f2.AddPathList(FileIOPermissionAccess.Read, Application.StartupPath+"\\Brpcgh.lfc"); 
f2.Demand(); 
+1

您是否正在使用'Application.StartupPath +“BLsms.ocx”'获得正确的路径,或者您必须使用'Application.StartupPath +“\ BLsms.ocx”' – Sandeep

+0

是的,我在安装完文件后。路径是C:\ Program Files(x86)\ MyFolder \ Myapp \ BLsms.ocx –

+1

请尝试'FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.AllAccess,Application.StartupPath + @“\ BLsms.ocx”);'也为其他两个文件 – Sandeep

回答

1

默认情况下,用户组在每个计算机位置(如Program Files)中都没有写入权限。这是一个与安装无关的Windows标准。但是,在安装期间,您可以设置所需的任何权限。

Windows Installer支持自定义权限,但Visual Studio不提供设置它们的方法。所以Visual Studio中唯一的解决方案就是自定义操作。

不幸的是,Visual Studio不支持附加的自定义操作。因此,使用XCACLS.EXE来设置权限只有在您将其包含在您的软件包中时才会起作用(它将随您的文件一起安装到目标机器上)。

清洁但更复杂的解决方案是自己编写自定义操作(使用自定义代码)来设置所需的权限。

最快和最干净的解决方案是使用不同的设置创作工具,它提供更多的权限控制。

2

我假设你要安装的程序到C:\Program FilesC:\Program Files (x86)。不要在这些目录中写入。改为使用C:\ProgramData或用户的主目录。

+0

是的,你是对的。如果我将文件写入其他路径,那么这些文件将可以访问。但是我必须保留所有文件并在这里​​访问文件。我想在代码中手动授予权限。 –

+0

将数据存储在Program Files目录中是不合适的。您需要管理员权限才能执行此操作,并且用户应用程序不应具有管理员权限。程序文件仅适用于程序代码。只有安装程序应该将任何东西写入这些目录中。你需要重新思考你的过程。 –

+0

@PrettyDoll为什么你用'C Drive'粘贴? –

1

我已经设置了来自Advance Installer的文件的读/写权限。并且工作正常。

http://www.advancedinstaller.com/user-guide/permission-dialog.html

感谢大家。

+1

请不要复制此链接到其他帖子,而不是没有进一步剪裁问题。你的另一个答案被标记为astroturfing。请参阅[帮助中心](https://stackoverflow.com/help/promotion)以避免再次被定为垃圾邮件发送者。 –

+1

我会重复说这是一个可怕的方法。有一个原因,你试图做的是困难的。不应该这样做。它打破了很多(大多数)不备份Program Files目录的备份策略,因为在安装之后,应该存在的代码和不可变的内容都是唯一的。您也可能会发现某些防病毒/防恶意软件会检测到这些更改并开始发出警告。如果您需要在终端服务环境中运行您的代码,那么您也会遇到问题。 –

+0

如果您尝试将其部署到使用漫游配置文件的环境中,并且您希望设置遵循用户,那么您也会遇到问题。 –