【问题标题】:Acess Denied. Reading and writing the file. Grant reading permission拒绝访问。读取和写入文件。授予阅读权限
【发布时间】:2015-07-11 00:53:45
【问题描述】:

安装后应用报错

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

这里 PathName 是完整的路径。

高级安装程序用于创建安装程序。

然后应用程序安装在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;
}

我也在表单加载方法中尝试了以下代码。

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();

【问题讨论】:

  • 您是使用Application.StartupPath+"BLsms.ocx" 获取正确路径还是必须使用Application.StartupPath+"\BLsms.ocx"
  • 是的,我在安装文件后。路径是 C:\Program Files (x86)\MyFolder\Myapp\BLsms.ocx
  • 请尝试FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.AllAccess, Application.StartupPath+@"\BLsms.ocx"); 也用于其他两个文件
  • @PrettyDoll Check this link。它可能会对你有所帮助。
  • @PrettyDoll Check this link。它提供了有用的信息。

标签: c# .net visual-studio-2012 .net-4.0


【解决方案1】:

我假设您正在将程序安装到C:\Program FilesC:\Program Files (x86)。不要写在那些目录中。请改用C:\ProgramData 或用户的主目录。

【讨论】:

  • 是的,你是对的。如果我将文件写入其他路径,则可以访问这些文件。但我必须将所有文件保存在这里并访问这里的文件。我想在代码中手动授予权限。
  • 不适合将数据存储在 Program Files 目录中。您需要管理员权限才能执行此操作,并且用户应用程序不应具有管理员权限。 Program Files 仅用于程序代码。除了安装程序之外,没有任何东西应该将任何内容写入这些目录。您需要重新考虑您的流程。
  • @PrettyDoll 为什么你坚持使用C Drive
  • @PrettyDoll 大多数程序肯定不会将自己的数据存储在程序文件中,Visual Studio 肯定不会——Visual Studio 将其数据存储到 C:\Users\{username}\AppData\Roaming \Microsoft\VisualStudio
  • 它还将一些数据存储到 C:\Users\{username}\Documents\Visual Studio 中(不过主要是项目文件)。所有插件和设置都存储在 AppData\Roaming 目录中
【解决方案2】:

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

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

谢谢大家。

【讨论】:

  • 请不要将此链接复制到其他帖子,除非进一步调整问题。您的另一个答案被标记为 astroturfing。请参阅help center 以避免再次被视为垃圾邮件发送者。
  • 我会重申这是一种糟糕的方法。您尝试做的事情很困难是有原因的。不应该这样做。它破坏了许多(大多数)不备份 Program Files 目录的备份策略,因为唯一应该在其中的东西是代码并且在安装后是不可变的。您可能还会发现某些防病毒/反恶意软件会检测到这些更改并开始发出警告。如果您需要在云端、终端服务环境中运行代码,您也会遇到问题。
  • 如果您尝试将其部署到使用漫游配置文件的环境中,如果您希望设置跟随用户,您也会遇到问题。
【解决方案3】:

默认情况下,用户组在程序文件等每台机器的位置没有写入权限。这是与安装无关的 Windows 标准。但是,在安装过程中,您可以设置所需的任何权限。

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

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

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

最快、最简洁的解决方案是使用不同的设置创作工具,该工具可提供对权限的更多控制。

【讨论】:

    猜你喜欢
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    相关资源
    最近更新 更多