2012-12-29 3 views
0

나는 설치 프로젝트를 추가 한 프로젝트를 가지고 있습니다. 나는 이것을 따라 갔다. (custom installer)# application auto start windows 7

커스텀 인스톨러 클래스를 추가했다. 이것의 목적 중 하나는 사용자가 로그인 할 때 자동 시작을위한 레지스트리에 프로그램을 추가하는 것입니다. 저는 Visual Studio를 관리자로 실행하고 있습니다 (비주얼 스튜디오 맨 위에 표시 - 참고 : 컴퓨터 관리에서는 관리자가 아닙니다). 내 노트북은 또한 powerbroker라는 응용 프로그램을 사용합니다. 응용 프로그램을 설치하려면 마우스 오른쪽 버튼을 클릭하고 elevated를 선택하십시오. 상승 된 다른 게시물을 읽는 것에서 관리자와 같지 않으며 아마 그 문제가 있습니다.

어쨌든 문제가 있습니다 : Visual Studio에서 키를 추가하는 데 오류가 발생하지 않습니다 (코드가 올바르게 실행 됨). 테스트 할 별도의 애플리 케이션을 작성했습니다. 그러나 키는 쓰이지 않습니다. 이해할 수 없습니다. 왜 내 설치 프로그램에 코드를 넣어 오류가 발생되지 않고 키가 작성 중 하나되지 상승 실행할

-이 밖으로 오류가 발생한 롤백 경우 적어도 설치 ....

내가했다 대신 currentuser에 대한 열쇠를 설정하려고 그게 잘 작동하지만 그 나에게 아무 소용이 ...

ia lso는 관리자의 구성원이고 액세스 권한이없는 로컬 사용자를 만들었습니다.

내가 알아 내려고 노력하고 무엇을 요약하면 것은 : 내가 레지스트리를 쓰기에 실패한다는 오류가 발생하고 현재 높은 privaleges에서 아래 오류가 발생하지 않는 코드를 기억 (설치 롤백하지만 실제로 작동 나던 수있는 방법)

이 문제의 수정 사항이 있습니까?

감사 다모

C# 설치 클래스 코드

using System; 
using System.Diagnostics; 
using System.Windows.Forms; 
using System.Collections; 
using System.ComponentModel; 
using System.Configuration.Install; 
using System.Reflection; 
using System.IO; 
using Microsoft.Win32; 



namespace OffLine.Installer 
{ 
    // Taken from:http://msdn2.microsoft.com/en-us/library/ 
    // system.configuration.configurationmanager.aspx 
    // Set 'RunInstaller' attribute to true. 

    [RunInstaller(true)] 
    public class InstallerClass : System.Configuration.Install.Installer 
    { 
     public InstallerClass() 
      : base() 
     { 
      // Attach the 'Committed' event. 
      this.Committed += new InstallEventHandler(MyInstaller_Committed); 
      // Attach the 'Committing' event. 
      this.Committing += new InstallEventHandler(MyInstaller_Committing); 
     } 

     // Event handler for 'Committing' event. 
     private void MyInstaller_Committing(object sender, InstallEventArgs e) 
     { 
      // **** Beta Only **** Set program to autostart 
      try 
      { 

       RegistryKey add = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 

       add.SetValue("FactoryAuditEventNotification", "\"" + Application.ExecutablePath.ToString() + "\""); 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message.ToString());    

      } 

     } 

     // Event handler for 'Committed' event. 
     private void MyInstaller_Committed(object sender, InstallEventArgs e) 
     { 
      try 
      { 
       Directory.SetCurrentDirectory(Path.GetDirectoryName 
       (Assembly.GetExecutingAssembly().Location)); 
       Process.Start(Path.GetDirectoryName(
        Assembly.GetExecutingAssembly().Location) + "\\FactoryAuditEventNotification.exe"); 
      } 
      catch 
      { 
       // Do nothing... 

      } 
     } 

     // Override the 'Install' method. 
     public override void Install(IDictionary savedState) 
     { 
      base.Install(savedState); 
     } 

     // Override the 'Commit' method. 
     public override void Commit(IDictionary savedState) 
     { 
      base.Commit(savedState); 
     } 

     // Override the 'Rollback' method. 
     public override void Rollback(IDictionary savedState) 
     { 
      base.Rollback(savedState); 
     } 
    } 
} 
+2

레지스트리 키에 대한 사용 권한보기 HKLM \ .. \ Run. regedit를 엽니 다. 키를 클릭하십시오. 편집 메뉴에서 사용 권한을 클릭하십시오. [procmon] (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)을 사용하여 hklm \ .. \ run 키에 대한 액세스 추적을 시도하십시오. – sergmat

+1

레지스트리 값을 작성하는 데는 많은 코드가 필요합니다. 레지스트리 테이블을 사용해 본 적이 있습니까? –

+0

@ christopher painter - 예. 방금 시도했습니다. "HKPU \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Run 위치에"[TARGETDIR] myapp.exe "라는 문자열 값을 추가했으나 작동하지 않습니다. 이 값은 HKPU \ SOFTWARE \ WOW6432node \ Microsoft \ Windows \ Currentversion \ Run입니다. – user1438082

답변