2

我在编写的 VB 程序以及在 64 位操作系统(如 Win2k8 或 Win2k3)中访问 Windows 注册表的 setup.exe 遇到了一些问题。

第一部分:setup.exe 和 Windows 注册表 的问题 首先我将解释 setup.exe 的问题。在安装期间,我有一个自定义操作在安装期间触发以将注册表更改为:

HKLM/软件/Microsoft/Windows NT/CurrentVersion/WinLogin/Userinit。

在 32 位操作系统上它工作正常,但在 64 位操作系统上它写入:

HKLM/软件/WOW6432Node/Microsoft/Windows NT/CurrentVersion/Winlogon/Userinit

我的问题是,当用户登录时,登录过程不会从该位置读取。我理解它为什么要访问 64 位注册表的 32 位部分。这是因为 setup.exe 是一个 32 位进程。我在任何地方都找不到如何将其设置为 64 位。也许所有 setup.exe 都是 32 位的,我不知道,因为我是创建安装程序的新手。关于如何解决这个问题的任何想法?

第二部分:64位进程访问Windows注册表 的问题第二个问题是当我的程序在用户登录后立即运行时。假​​设设置了一个注册表值,以防止用户运行“任务管理器”并能够杀死应用程序. 我知道规避 Windows 安全性可能是一种糟糕的编码实践,但这是我正在为我的公司编写的内部应用程序。

下面的代码是触发任务管理器锁定和解锁的函数。在 32 位系统上它工作得很好,它是在 64 位系统上不起作用。启用 UAC 时也会出现一些问题。我不希望用户被提示以管理员身份运行,并且也不知道该怎么做。有任何想法吗?

Private Sub taskMgrState(ByVal state As String)
    Dim hive As String = "HKEY_CURRENT_USER\"
    Dim systemSubKey As String = "Software\Microsoft\Windows\CurrentVersion\Policies\System"
    If state = "enabled" Then
        'enable task manager use
        'create the subkey for later use
        If My.Computer.Registry.GetValue(hive & systemSubKey, "DisableTaskMgr", Nothing) Is Nothing Then
            My.Computer.Registry.LocalMachine.CreateSubKey(systemSubKey)
        End If
        'set DisableTaskMgr valuename to 0 which disables blocking the running of task manager
        My.Computer.Registry.SetValue(hive & systemSubKey, "DisableTaskMgr", 0)
    ElseIf state = "disabled" Then
        'disable the use of the task manager while this app is running
        If My.Computer.Registry.GetValue(hive & systemSubKey, "DisableTaskMgr", Nothing) Is Nothing Then
            My.Computer.Registry.LocalMachine.CreateSubKey(systemSubKey)
        End If
        'set DisableTaskMgr valuename to 0 which disables blocking the running of task manager
        My.Computer.Registry.SetValue(hive & systemSubKey, "DisableTaskMgr", 1)
    End If
End Sub
4

1 回答 1

1

要更改设置项目目标平台在解决方案资源管理器中单击您的ProjectName 部署项目 Proeprties(通常是顶部的第二个项目),然后导航到其属性选项卡并找到目标平台它会自动x86将其更改为x64您现在将拥有不过要发布 2 个版本。:)

于 2012-07-23T19:11:42.920 回答