나는 설치 프로젝트를 추가 한 프로젝트를 가지고 있습니다. 나는 이것을 따라 갔다. (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);
}
}
}
레지스트리 키에 대한 사용 권한보기 HKLM \ .. \ Run. regedit를 엽니 다. 키를 클릭하십시오. 편집 메뉴에서 사용 권한을 클릭하십시오. [procmon] (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)을 사용하여 hklm \ .. \ run 키에 대한 액세스 추적을 시도하십시오. – sergmat
레지스트리 값을 작성하는 데는 많은 코드가 필요합니다. 레지스트리 테이블을 사용해 본 적이 있습니까? –
@ christopher painter - 예. 방금 시도했습니다. "HKPU \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Run 위치에"[TARGETDIR] myapp.exe "라는 문자열 값을 추가했으나 작동하지 않습니다. 이 값은 HKPU \ SOFTWARE \ WOW6432node \ Microsoft \ Windows \ Currentversion \ Run입니다. – user1438082