2010-12-30 17 views
3

@Marc Gravell氏は、Windowsサービスhereのインストール方法の素晴らしい例を示しました。私は行ってそれを実装し、すべてが良かった。AssemblyInstallerを使用してWindowsサービスをインストールする際の問題

その後、コンピュータを再起動しました。突然、インストールしようとしたときにセキュリティ例外が発生しました。 SecurityException:「要求されたレジストリアクセスは許可されていません」と表示されます。私は再起動からトラブルが起きたと思っていたので、頭に2度目の打撃が記憶喪失を治すような漫画のように、私は再びリブートを試みました...しかし、人生は漫画のようではありません... :(

OK、だから、私は問題を捜し、レジストリキーHKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlogの権利を私のネットワークサービスに与える提案を見つけました。この処理には他の特権が必要な場合があります。 "(内部例外はWin32Exception:"アクセスが拒否されました ")Um、よろしくお願いします。私はローカルコンピュータにインストールしようとしています!そこにいる "コンピュータ"とは何ですか?

私が言ったように、昨日はうまくいっていて、今日ではコードベースに明らかな変更を加えずにすべてが崩れてしまったので、これは非常にイライラです。

using (var inst = new AssemblyInstaller(typeof(MyNamespace.Program).Assembly, new string[] { })) { 
    IDictionary state = new Hashtable(); 
    inst.UseNewContext = true; 
    try { 
    if (uninstall) { 
     inst.Uninstall(state); 
    } else { 
     inst.Install(state); 
     inst.Commit(state); 
    } 
    } catch { 
    try { 
     inst.Rollback(state); 
    } catch { } 
    throw; 
    } 
} 

インストーラのコードは次のとおりです:

[RunInstaller(true)] 
public sealed class MyServiceInstallerProcess : ServiceProcessInstaller { 
    public MyServiceInstallerProcess() { 
    this.Account = ServiceAccount.NetworkService; 
    } 
} 

[RunInstaller(true)] 
public sealed class MyServiceInstaller : ServiceInstaller { 
    public MyServiceInstaller() { 
    this.Description = "My service desc"; 
    this.DisplayName = "My service name"; 
    this.ServiceName = "My service name"; 
    this.StartType = ServiceStartMode.Automatic; 
    } 
} 

は何ここで間違っている可能性

はここ(マルクGravellのサンプルからコピーされ、適応)のインストールを行います私のコードですか?そして、なぜ彼らはあらかじめうまく働いていたのですか?

答えて

8

管理者権限で/インストーラを実行します。誰もがシステムのレジストリキーやものにアクセスできるようにするのは非常に間違っています。

+0

ああ、そうだった。インストーラの作業を開始する前に、管理モードでVSを開いていたので、すべてがうまくいきました。再起動すると、VSが通常モードで開き、管理者権限が失われました。ありがとうございました! –

関連する問題