Как настроить параметры входа для службы Windows, которая устанавливается через вызов c # AssemblyInstaller? - PullRequest
0 голосов
/ 01 ноября 2018

Я искал долго и упорно для решения этой проблемы, к сожалению, ничего я пытался до сих пор работает.

Вопрос : как установить учетные данные для входа в службу, которую устанавливает эта функция? На данный момент по умолчанию 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;

    }
...