Я искал долго и упорно для решения этой проблемы, к сожалению, ничего я пытался до сих пор работает.
Вопрос : как установить учетные данные для входа в службу, которую устанавливает эта функция? На данный момент по умолчанию localsystemaccount
.
Когда я пытаюсь добавить обработчик событий, чтобы установить учетную запись и пароль для входа в систему, как показано в примере:
https://csharp.hotexamples.com/site/file?hash=0xf9962fd5be4a761736a9d350fdd72135dd0954853d267eca8ccbd9349e15f467&fullName=VirtualBoxService/ElevatedService.cs&project=shabbirh/virtualboxservice
Я получаю ошибку:
Тип 'System.Configuration.Install.InstallerCollection' в сборке 'System.Configuration.Install, версия 4.0.0.0, .... .... не помечен как сериализуемый "
private bool TryInstallWindowsService(WindowsService WinService)
{
IDictionary mySavedState = new Hashtable();
var domain = AppDomain.CreateDomain("MyDomain");
// Create an object of the 'AssemblyInstaller' class.
using (AssemblyInstaller Installer = domain.CreateInstance(typeof(AssemblyInstaller).Assembly.FullName,
typeof(AssemblyInstaller).FullName, false, BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.ExactBinding,
null, new Object[] { WinService.DefaultPath, new String[] { } }, null, null, null).Unwrap() as AssemblyInstaller)
{
Installer.UseNewContext = true;
//The below line causes an error to be thrown "Type 'System.Configuration.Install.InstallerCollection' in assembly 'System.Configuration.Install, version 4.0.0.0,....
//.... is not marked as serializable"
//Installer.BeforeInstall += new InstallEventHandler(installer_BeforeInstall);
try
{
// Install the 'MyAssembly' assembly.
myAssemblyInstaller.Install(mySavedState);
// Commit the 'MyAssembly' assembly.
myAssemblyInstaller.Commit(mySavedState);
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
myAssemblyInstaller.Rollback(mySavedState);
return false;
}
finally
{
myAssemblyInstaller.Dispose();
}
}
AppDomain.Unload(domain);
return true;
}