@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のサンプルからコピーされ、適応)のインストールを行います私のコードですか?そして、なぜ彼らはあらかじめうまく働いていたのですか?
ああ、そうだった。インストーラの作業を開始する前に、管理モードでVSを開いていたので、すべてがうまくいきました。再起動すると、VSが通常モードで開き、管理者権限が失われました。ありがとうございました! –