web-dev-qa-db-ja.com

レジストリ実行キーからプログラムが起動しない

NSISスクリプトを使用してインストールするプログラムがあります。インストーラーの最後のステップは、レジストリの実行キーに書き込み、起動時にプログラムを実行することです。私はそれを確認しました

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run 

キーが存在します

MyCompany Program - C:\MyCompany\Program\launch.vbs

引用符の有無にかかわらずキーを試しましたが、影響はありませんでした。追加することにより、レジストリがCurrentVersion\Runから読み取っていることを確認しました

Notepad - C:\windows\notepad.exe

メモ帳が起動時に起動するようになりました。 launch.vbsスクリプトは、cmd.exeウィンドウなしでスクリプトを起動するためのワンライナーです。

'HideBat.vbs from https://superuser.com/questions/140047/how-to-run-a-batch-file-without-launching-a-command-window
CreateObject("Wscript.Shell").Run "cmd /c " & chr(34) & "C:\MyCompany\Program\run.cmd " & chr(34), 0, True

エクスプローラーウィンドウまたはcmd.exeからlaunch.vbsを呼び出すと、期待どおりに機能することを確認しました(プログラムを起動します)。 msconfigは、C:\ MyCompany\Program\launch.vbsがスタートアップタブにリストされていることを確認します。 [ファイルのプロパティ]の[セキュリティ]タブには、すべてのユーザーに読み取りと実行の権限が必要であることが示されています。 run.cmdが実際に呼び出されるのと同じです。

この時点で、プログラムが起動されない理由がわからなくなっており、プログラムをデバッグするための効率的な方法がわかりません。

システムはWindows7 Professional64ビットです。

1
guest

LPChipの助けを借りて、メッセージボックスのデバッグを開始し、スクリプトが起動されていることを確認しましたが、エラーが発生しました。 launch.vbsを次のように更新しました

CreateObject("Wscript.Shell").Run "cmd /k " & chr(34) & "C:\MyCompany\Program\run.cmd " & chr(34), 1, True

(ウィンドウを存続させるために/ kに注意し、表示するために1に注意してください)。そこから、CurrentVersion\Runを介して起動されたスクリプトのクラスパスにJavaが設定されていないことが明らかになりました。パスをJava(Java $ ===)にハードコーディングします。私たちのクライアントはとにかく使用することを余儀なくされます)run.cmdで問題を解決しました。

1
guest