【问题标题】:writing to a file in the system directory写入系统目录中的文件
【发布时间】:2013-03-28 06:49:25
【问题描述】:

我一直在尝试写入计算机系统目录中的文件,但我无法让它工作;我该怎么做才能获得必要的权限?我需要更新 SS 而不必手动更改每台计算机的权限...

    var
    z: THandle;
...
    begin
    ....
    z:=OpenFile('myfile.scr',a,OF_WRITE);
    FileWrite(z,buf[16],3124);
    FileClose(z);
    end;

【问题讨论】:

  • 如果没有以管理员身份登录,操作系统不允许这样做。这不是德尔福问题。您的应用必须由管理员运行。
  • 我以管理员身份运行它,但它仍然没有写入系统目录(windows 8)。而且我已经知道这不是 Delphi 问题,哈哈(对不起,如果我发布的来源让人们感到困惑)。
  • 对我来说这看起来像是可疑代码,但问题是操作系统权限,如果没有管理员权限,您无法设置它们。这里有几十篇关于操作系统权限的帖子;在[windows] file privilege 上搜索之前的一些问题。
  • Vista及以上还需要获取UAC Elevation

标签: file delphi permissions


【解决方案1】:

这很可能是file system redirector。假设您确实在提升,那么您将拥有足够的权利。但是 32 位进程会看到 32 位系统文件夹 SysWOW64。那可能就是您的文件所在的位置。

如果您确实需要写入 64 位系统目录,请运行 64 位进程,或写入 sysnative alias。

我不太清楚您为什么使用旧版 OpenFile。使用 CreateFile 是正常的。甚至 TFileStream。

【讨论】:

  • 我刚刚将代码注入资源管理器并让它为我完成工作(更好的方法,尽管我的 av 将它检测为病毒imao)。
【解决方案2】:

您可以按照此处所述向您的应用程序添加清单:

How to add manifest <requestedPrivileges> info into delphi project

这样,在应用程序启动时,Windows UAC 将提示管理员权限。这篇文章是关于 Delphi XE 的,但我已经在 Delphi 2005 上成功测试了清单。

在开发过程中,一定要以管理员权限启动 Delphi IDE。否则,当您尝试在 IDE 之外运行/调试程序时,它可能会崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2011-12-30
    • 1970-01-01
    • 2020-02-17
    • 2017-07-29
    • 1970-01-01
    • 2010-10-15
    相关资源
    最近更新 更多