インストール時にMyapp.exe.configファイル(app.configファイルに基づいて生成された)をインストールディレクトリに配置するサービスがあります。インストールプロセス中に、インストールを構成するためにこのファイルの詳細が必要です。特に、サービスのServiceProcessInstallerインスタンスのAccount / Username / Passwordフィールドを微調整して、実行時に特定のユーザーとして実行されるようにする必要があります。
ただし、インストールプロセス中に、インストーラーはまだレジストリ設定を設定しておらず、Myapp.exe.configをインストールディレクトリにコピーしていません...したがって、これらの値を取得する方法がありません。つまり、サービスを正しいものとしてインストールできません。ユーザー。現在私ができる唯一の方法は、ユーザー/パスの値をProjectInstallerクラスにハードコーディングすることですが、この方法でそれを行うことはできません。それはただ間違っています。
特定のユーザーとしてサービスをインストールする方法と、インストールプロセス中にそれらの資格情報にアクセスする方法に関するWindowsインストールのベストプラクティスはありますか?
現在、私は次のようなことを試みています:
namespace MyService
{
[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
public ProjectInstaller()
{
InitializeComponent();
//Set the user credentials.
//NOTE: Eventually this needs to be updated to pull these values out of a
// conf file. The problem now is that the location of the conf file
// is tied to a registry entry for the location of the service which
// may or may not exist when this block is executed.
/* This is the only way I can get it to work, but this is
* too horrible to ever actually do it this way:
serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.User;
serviceProcessInstaller1.Username = "DOMAIN\\user";
serviceProcessInstaller1.Password = "password";
*/
// Try to pull the service's registry values to know where it installed:
RegistryKey keyService = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\services\\MyService");
string path = ((string)keyService.GetValue("ImagePath"));
path = path.Substring(1, path.LastIndexOf('\\'));
string user = someValueFromFileIOontheAbovePath1,
pass = someValueFromFileIOontheAbovePath2;
serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.User;
serviceProcessInstaller1.Username = user;
serviceProcessInstaller1.Password = pass;
//Doesn't work because install isn't complete and there aren't reg settings
// yet, and even if I had the path the .config file is not written yet so
// there's no file to parse.
}
}
}
これらのパラメータを保持するいくつかの.configファイル:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="User" value="DOMAIN\bob"/>
<add key="Password" value="secret"/>
</appSettings>
</configuration>
これらのユーザー/パス値をバイナリにハードコーディングせずに、インストール中にプルするにはどうすればよいですか?
ありがとう。