PHP:在注册表中创建一个文件夹

时间:2009-04-02 12:43:32

标签: php windows com registry wsh

如何使用PHP创建新的注册表值?

以下代码不起作用:

function registry_write($folder, $key, $value, $type="REG_SZ")
{
  $WshShell = new COM("WScript.Shell");

  $registry = "HKEY_LOCAL_MACHINE\\SOFTWARE\\" . $folder . "\\" . $key;
  //$result = $WshShell->RegRead($registry);
  $result = $WshShell->RegWrite($registry, $value, $type);

  return($result);
}

$folder = "7-ZIP";
$key = "Mac";
$value = "123";

registry_write($folder,$key,$value);

7-ZIP内已有一个名为HKEY_LOCAL_MACHINE\SOFTWARE的密钥。

apache / logs中的error.log中没有条目。

To:Tomalak 如何修改这些权限/身份?有没有办法用PHP做到这一点?

我想做什么: 我有一个Adobe AIR应用程序,我将其与MySql和PHP捆绑在一起。当这个应用程序安装在一台机器上时,我想把一些关于机器的信息放在注册表中,这样每次都可以 应用程序运行我可以验证它是否没有被盗版。

1 个答案:

答案 0 :(得分:1)

除非您对默认权限/身份进行了修改,否则您的Web服务器进程(PHP运行的进程)对HKEY_LOCAL_MACHINE没有写入权限。

除此之外,您的注册表术语有点混乱。

注册表由“键”和“值”组成。每个值都有一个名称(和一个类型),每个键可以包含多个值和键。没有文件夹。

有鉴于此,我建议像这样重构你的功能:

function registry_write($key, $name, $value, $type="REG_SZ") {
  $WshShell = new COM("WScript.Shell");

  $path = "HKLM\\SOFTWARE\\$key\\$name";

  try {
    $WshShell->RegWrite($path, $value, $type);
    return true;
  }
  catch (Exception $e) {
    // echo or log the error
  }

  return false;
}