Невозможно выдать себя за пользователя и установить приложения без вывода сообщений.Как установить приложения в режиме без вывода сообщений или без участия пользователя из приложения WinForms C #? - PullRequest
0 голосов
/ 27 сентября 2018

Я работаю над инструментом установки пакетов, который требует установки приложения из этого инструмента без взаимодействия с пользователем, и установка должна начаться после олицетворения с учетной записью администратора.Вот код, который я использую в настоящее время.Но забудьте о тихой установке, она даже не выдает себя за администратора.Кто-нибудь может помочь мне добиться установки без вывода сообщений через олицетворение в этом приложении WinForms C #?

private void SilentInstaller(string dir, string package, string option, long PckgID)
    {
        if (File.Exists(dir + @"\" + package))
        {
            Pckg_Ws_ExecModel obj = PendingPackages.Where(x => x.Pckg_ID == PckgID).FirstOrDefault();
            if (obj.Status != "Installing" || obj.Status != "Installed")
            {
                obj.Status = "Installing";
                packageWS_service.UpdatePackageWorkstation(obj);
                SafeTokenHandle safeTokenHandle;
                string domainName = "corp";
                string userName = ConfigurationManager.AppSettings["xusername"];
                string password = ConfigurationManager.AppSettings["xpassword"];
                const int LOGON32_PROVIDER_DEFAULT = 0;
                const int LOGON32_LOGON_INTERACTIVE = 2;
                try
                {
                    Console.WriteLine("Started myProcess");
                    // Call LogonUser to obtain a handle to an access token.
                    bool returnValue = LogonUser(userName, domainName, password,
                        LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
                        out safeTokenHandle);
                    if (returnValue)
                    {
                        using (safeTokenHandle)
                        {
                            //if (processingPackage.Pckg_ID > 0)
                            //    AddEvent(processingPackage.Pckg_ID, "Download Started");
                            Console.WriteLine("Before impersonation: " + WindowsIdentity.GetCurrent().Name);
                            using (WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()))
                            {
                                using (WindowsImpersonationContext impersonatedUser = newId.Impersonate())
                                {
                                    Console.WriteLine("After impersonation: " + WindowsIdentity.GetCurrent().Name + "\n");
                                    Process myProcess = new Process();
                                    myProcess.StartInfo.RedirectStandardError = true;
                                    myProcess.StartInfo.RedirectStandardOutput = true;
                                    myProcess.StartInfo.UseShellExecute = false;
                                    myProcess.StartInfo.FileName = dir + @"\" + package;
                                    myProcess.StartInfo.Arguments = "/user:Administrator \"cmd /K " + "" + "\"";
                                    myProcess.StartInfo.CreateNoWindow = true;
                                    myProcess.Start();
                                    myProcess.PriorityClass = ProcessPriorityClass.BelowNormal;
                                    myProcess.WaitForExit();
                                }
                            }
                        }
                    }

                    Console.WriteLine("Prog should have waited for exit to print this");
                    //MSGError("Installation completed");
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    //MSGError("Installation failed");
                    //MSGError(e.ToString());
                    errorService.AddError(new ErrorModel() { Ws_ID = MachineName(), Usr = UserName(), Pckg_ID = PckgID, Error1 = e.Message });
                }
            }
        }
        else
        {
            //Errors.Detect = true;
            //MSGError("Installer no longer exist");
            errorService.AddError(new ErrorModel() { Ws_ID = MachineName(), Usr = UserName(), Pckg_ID = PckgID, Error1 = "Installer no longer exist" });
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...