我正在Delphi XE2 Project在Windows注册表中写入一些值 . 我想在Delphi环境中运行RegEdit . 我试过以下代码:
procedure TMainForm.BitBtn01Click(Sender: TObject);
begin
ShellExecute(handle,'','C:\WINDOWS\regedit.exe',
'[HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000001}\Subnode 01]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,\
00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,\
41,00,70,00,70,00,6c,00,69,00,63,00,61,00,74,00,69,00,6f,00,6e,00,20,00,57,\
00,69,00,7a,00,61,00,72,00,64,00,20,00,30,00,31,00,2e,00,64,00,6c,00,6c,00,\
00,00'
,nil,SW_SHOW);
end;
但它没有编译 . 我的要求是将子节点01的可扩展字符串值写为“%SystemRoot%\ System32 \ Application Wizard 01.dll” . 我的项目的Active Platform是32Bit,但也添加了64Bit,我的应用程序将在管理员的平台下运行 .
我想我的问题可以通过调用Wow64DisableWow64FsRedirection Function和Wow64EnableWow64FsRedirection Function来解决 . 但目前尚不清楚何时调用它 . 这是my project的另一个细节 .
3 回答
不要试图失败重定向,只需使用此力量让您的生活更轻松 .
如果将DLL文件放入全局Windows存储区,则必须将其放入
System32
文件夹中 . 但是,此文件夹根据操作系统平台和应用程序支持的平台而有所不同 .为了您的方便,当从 x32 app 上的 x32 app 写入注册表时,Windows也有自动重定向,因此您不必为此进行额外处理 .
按照设计,您使用此代码编写始终是DLL文件的正确路径 .
所有三种情况的一个代码库,没有任何编译器开关或OS平台检查 .
但是你必须注意安装,把文件放在正确的位置 .
以下是Inno Setup的示例脚本,它处理两个平台 . 在x32操作系统上,它只会安装x32应用程序,在x64操作系统上它将安装两个(x32 / x64)应用程序 .
这是示例应用程序(两个平台的一个代码库) . 有一个编译器开关,用于设置表单 Headers . 就这样 .
试试这样:
您不使用有效的字符串 . 在字符串中进行换行时,需要将其关闭并用符号连接 .
例如 . :
或者将整个字符串参数写在一行中 .