Windows 无法从批处理文件中读取注册表

Windows 无法从批处理文件中读取注册表,windows,batch-file,cmd,registry,Windows,Batch File,Cmd,Registry,我有一个要求,根据某些注册表值,我需要使用批处理文件来执行某些任务。如果我手动运行批处理文件,我就能够运行并实现我的目标。但如果批处理使用某些可执行文件运行,则无法获取注册表值。它将所有注册表值读取为空。我看不出这种行为有什么特别的原因。实际需求是将此批处理文件作为自解压可执行文件的一部分运行。我试着用C#应用程序启动它,但还是没有成功。有什么想法吗?我做错了什么。提升可执行文件的权限,即以管理员身份运行我尝试以管理员身份运行,但无法运行。当我使用命令提示符运行批处理时,它不需要管理员权限即可运

我有一个要求,根据某些注册表值,我需要使用批处理文件来执行某些任务。如果我手动运行批处理文件,我就能够运行并实现我的目标。但如果批处理使用某些可执行文件运行,则无法获取注册表值。它将所有注册表值读取为空。我看不出这种行为有什么特别的原因。实际需求是将此批处理文件作为自解压可执行文件的一部分运行。我试着用C#应用程序启动它,但还是没有成功。有什么想法吗?我做错了什么。

提升可执行文件的权限,即以管理员身份运行

我尝试以管理员身份运行,但无法运行。当我使用命令提示符运行批处理时,它不需要管理员权限即可运行。所以这似乎不是问题所在。发布代码,否则这篇文章因堆栈溢出而脱离主题。最可能的原因是:可执行文件是32位的,因此它正在启动一个32位的
cmd.exe实例来运行批处理文件,所以您看到的是。类似于的东西可能会解决这个问题。@Harry谢谢。这才是真正的原因。尽管可执行文件是64位的,但它仍在尝试读取32位注册表。我不得不强制它读取64位注册表。如果启动批处理文件的可执行文件真的是64位的,那么您应该使用运行批处理文件的64位命令解释器,因此它的行为应该与从命令行运行时的行为相同。如果不是这样,你应该找出原因——这可能表明问题更严重。