2017-10-23 17 views
0

VB.NETでWindowsレジストリの起動時にプログラムを追加しようとしました。私は許可を変更しようとした、オンラインの多くのメソッドを使用しますが、それらはすべて失敗したことが証明されているRegistry.SetValueを使用しているときに「不正な操作を実行しようとしました」というエラーが発生しました

Attempted to perform an unauthorized operation.

:私はプログラムを実行するときしかし、私はこのエラーメッセージが表示されます。私はちょうどレジストリを妨害する許可を持っていないようです。ここで

は私のコードです:

My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "FILENAME", "FILEPATH") 

私が間違って何をしているのですか?

+1

サイドノート:常にユーザーに喜んで起動するようにアプリケーションを追加するオプションを与え、そしてへのオプションをそれを逆にする。 **ユーザーの許可なしに起動時にアプリケーションを実行させない**。 –

+0

HKEY_CURRENT_USERの何かが、特別な権限を必要とせずに書き込み可能です。アクセス権ではなく、長いパスでSetValue()を呼び出すのではなく、キーを取得(またはサブキーを開く)してキーの値を設定する必要があると思われます。 –

+0

返信してくれてありがとう、私はYouTubeで多くのチュートリアルを見てきましたが、彼らはユーザーの許可を含まないし、彼らはまだ動作します。これらの動画をご覧ください:https://www.youtube.com/watch?v=baXyf-jlGm4 –

答えて

2

Joelがコメントに記載したように、まずサブキーを開いて値を設定する必要があります。私は、コマンドを渡したい場合にはAddToStartup方法で

Public Sub AddToStartup(Optional appCommand As String = "") 
    Dim applicationName As String = Application.ProductName 
    Dim applicationPath As String = Application.ExecutablePath 
    Dim regKey As Microsoft.Win32.RegistryKey 
    regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True) 
    regKey.SetValue(applicationName, """" & applicationPath & """" & appCommand) 
    regKey.Close() 
End Sub 

Public Sub RemoveFromStartup() 
    Dim applicationName As String = Application.ProductName 
    Dim regKey As Microsoft.Win32.RegistryKey 
    regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True) 
    regKey.DeleteValue(applicationName, False) 
    regKey.Close() 
End Sub 

私はオプションのパラメータを使用する(すなわち、 appCommand):

ここで私は通常、Windowsの起動時からに/私のプログラムを追加/削除するために使用する方法がありますWindowsの起動時に実行されるインスタンスの引数。たとえば、起動時に実行中のトレイ内のプログラムを非表示にするには、" -Hide"を入力します。

サイドノート:は、起動時にアプリケーションを喜んで追加するオプションと、それを元に戻すオプションを常にユーザに与えます。 そうでない場合は、ユーザーがあなたを嫌いますが、ユーザーの許可なく、起動時に実行するようにアプリケーションを強制しないでください:)

+0

すべての回答のおかげで、彼らは非常に感謝し、非常に有益でした!私はこれまで、@ Joelはレジストリへの干渉がユーザ権限を必要とせずに動作するように見えたので、なぜこれが可能であるのか不思議でした。私は最初にユーザーの許可を与えなければならないことに同意します。もう一度すべての応答のおかげで:) –

+0

私はちょうど別の問題に遭遇しました! (私はあなたが私にうんざりしないことを願っています!)。私は当初、regkeyを追加するときに別の名前と実行可能パスを使いたいと思っていました。 Application.ProductNameとApplication.ExecutablePathを使用するのは、プログラムを実行するときに機能しますが、実行されている元のexeファイルではなく、起動時とは異なるパスを持つファイルを追加したいとします。だから私は別の実行可能なパス/名前を使用する予定ですが、私はまだ同じエラーが発生します: "不正な操作を実行しようとしました"。なぜこれができるのか知っていますか? –

+0

私がしたいことは、プログラムが実行されると、特定の場所に自分自身をコピーし、コピーしたファイルの新しいファイルの場所がスタートアップに追加されるということです。 –

関連する問題