2017-10-23 2 views
0

Windows 레지스트리에서 시작할 때 자동으로 추가되는 VB.NET 프로그램을 만들려고했습니다. 내가 권한을 변경하려고 시도하고 온라인 많은 방법을 사용하지만 모두 실패로 입증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

모든 응답 덕분에, 그들은 매우 감사하고 매우 유익했습니다! :) (Ahmed, Joel and Plutonix) 이전에 @ Joel은 레지스트리에 대한 간섭이 사용자 권한을 요구하지 않고 작동하는 것 같아서 이것이 왜 가능했는지 궁금했습니다. 나는 사용자 허가가 처음에 주어져야한다는 것에 동의한다. 모든 응답 덕분에 다시 :) –

+0

방금 ​​다른 문제가 발생했습니다! (나는 당신이 나와 함께 지긋 지긋하지 않기를 바란다!). 처음에는 regkey를 추가 할 때 다른 이름과 실행 경로를 사용하려고했습니다. Application.ProductName과 Application.ExecutablePath를 사용하면 프로그램을 실행할 때 작동하지만 실행중인 원래 exe 파일이 아닌 시작 경로에 파일을 추가하려고합니다. 따라서 다른 실행 경로/이름을 사용하려고 할 때도 "권한없는 조작을 시도했습니다"라는 동일한 오류가 발생합니다. 왜 이것이 될 수 있는지 아십니까? –

+0

내가하고자하는 것은 프로그램을 실행하면 특정 위치에 파일을 복사하고 복사 된 파일의 새 파일 위치가 시작에 추가된다는 것입니다. –

관련 문제