私が作成した 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