2

私が作成した VB プログラムと、Win2k8 や Win2k3 などの 64 ビット OS で Windows レジストリにアクセスする setup.exe に問題があります。

第 1 部: setup.exe と Windows レジストリ の問題 まず、setup.exe の問題について説明します。インストール中に、インストール中に起動してレジストリを次のように変更するカスタム アクションがあります。

HKLM/ソフトウェア/マイクロソフト/Windows NT/CurrentVersion/WinLogin/Userinit.

32 ビット OS では問題なく動作しますが、64 ビット OS では次のように書き込みます。

HKLM/ソフトウェア/WOW6432Node/マイクロソフト/Windows NT/CurrentVersion/Winlogon/Userinit

ここでの問題は、ユーザーがログインしたときにログオン プロセスがこの場所から読み取らないことです。64 ビット レジストリの 32 ビット部分にアクセスしている理由を理解しています。これは、setup.exe が 32 ビット プロセスであるためです。代わりに64ビットに設定する方法がどこにも見つかりません。おそらくすべての setup.exe は 32 ビットですが、セットアップ プログラムを作成するのは初めてなのでわかりません。この問題を乗り越える方法について何か考えはありますか?

2 番目の部分: Windows レジストリにアクセスする 64 ビット プロセス の問題. 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 展開プロジェクトのプロパティ(通常は上から 2 番目の項目) をクリックし、そのプロパティタブに移動して、ターゲット プラットフォームを見つけます。自動的にx86です。これをx64に変更します。ただし、2つのバージョンをリリースします。:)

于 2012-07-23T19:11:42.920 に答える