Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 42
1
.NET 4.x

Запуск скрипта с привилегиями администратора

26.01.2016, 16:23. Просмотров 1602. Ответов 12
Метки нет (Все метки)

Здравствуйте. Создал службу windows 10. Она должна запускать скрипт Powershell. Но что-то не запускает. В чем проблема? Пользователь с правами администратора, подтверждение действий администратора отключено.

C#
1
2
3
4
5
6
7
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = true;
startInfo.Verb = "runas";
startInfo.FileName = "powershell.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = @"-f c:\script.ps1";
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2016, 16:23
Ответы с готовыми решениями:

Запуск приложения с разными привилегиями
Подскажите вот я научился запускать процесс из под администратора processInfo.Verb = "runas" как...

Запуск bat скрипта с пониженными привилегиями
Привет ☺ Как в bat скрипте, который запускается с правами администратора прописать запуск...

Запуск скрипта с повышенными привилегиями [руководство]
Как запустить Batch-файл от имени Администратора (с повышенными правами). Вариант 1) Правая...

Запуск скрипта с правами администратора
Доброго времени суток! Есть система: WinXP (SP3). Машина входит в домен. На компе два...

12
Ушел с форума
Эксперт С++
16297 / 7364 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
26.01.2016, 16:43 2
А какое отношение имеют права пользователя к процессу, запущенному из службы?
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 42
26.01.2016, 17:07  [ТС] 3
Подскажите пожалуйста как можно остледить в чем проблема. Отладочные логи вывожу в event log. Процесс стартует нормально.
0
Ушел с форума
Эксперт С++
16297 / 7364 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
26.01.2016, 17:11 4
Просто не надо запускать из службы программы, которые требуют
взаимодействия с пользователем (ввод с клавы-мыши, звук, дисплей).
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 42
26.01.2016, 17:26  [ТС] 5
Мой Powershell cкрипт делает выборку логов из бд microsoft sql server через sqlcmd и отправляет эти логи на email.
Никак нельзя это реализовать?
0
Ушел с форума
Эксперт С++
16297 / 7364 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
26.01.2016, 17:38 6
Можно, конечно.
Только если запускать из службы, "runas" точно не нужен.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 42
26.01.2016, 17:48  [ТС] 7
А как можно посмотреть почему не запускается скрипт? Вывод результата Process.Start(startInfo) как можно увидеть? Может проблема и не в правах.
0
1448 / 840 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
26.01.2016, 17:59 8
Цитата Сообщение от kloopa Посмотреть сообщение
Может проблема и не в правах.
Попробуй так сделать:

C#
1
2
3
4
5
6
7
8
9
10
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = true;
startInfo.Verb = "runas";
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardError = true;
startInfo.FileName = "powershell.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = @"-f c:\script.ps1";
А у самого процесса после старта юзануть методы:
C#
1
2
3
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
0
Ушел с форума
Эксперт С++
16297 / 7364 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
26.01.2016, 18:00 9
Писать результат каждой операции в лог-файл.
Для отладки неинтерактивных приложений это типичный выход.
0
1448 / 840 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
26.01.2016, 18:00 10
И если не прокатит убери WindowStyle и поставь UseShellExecute в false.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 42
26.01.2016, 18:59  [ТС] 11
Что-то ничего не помогает. Даже если вызвать ошибку нарочно, то файл лога ошибки все равно не создает, просто пишет в eventlog "Error when tried to start task. Creating wd.log".
В логах SQL сервера коннекта так же не обнаружено.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace WatchDogService
{
    public partial class WatchDogService : ServiceBase
    {
        public WatchDogService()
        {
            InitializeComponent();
            eventLog1 = new System.Diagnostics.EventLog();
 
            if (!System.Diagnostics.EventLog.SourceExists("MySource"))
            {
                System.Diagnostics.EventLog.CreateEventSource(
                    "MySource", "MyNewLog");
            }
            eventLog1.Source = "MySource";
            eventLog1.Log = "MyNewLog";
        }
 
        public void RunTask(string currtime)
        {
            // Use ProcessStartInfo class
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.CreateNoWindow = false;
            startInfo.UseShellExecute = false;
            startInfo.FileName = "powershell.exe";
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.Arguments = @"-f c:\script.ps1";
            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardInput = true;
            startInfo.RedirectStandardError = true;
 
            try
            {
                using (Process exeProcess = Process.Start(startInfo))
                {
                    exeProcess.BeginOutputReadLine();
                    exeProcess.BeginErrorReadLine();
                    exeProcess.WaitForExit();
                    eventLog1.WriteEntry("Task finished");
                }
            }
 
            catch
            {
                // Create a file to write to.
                using (StreamWriter sw = File.AppendText(@"C:\errlog.log"))
                {
                    eventLog1.WriteEntry("Error when tried to start task. Creating wd.log");
                    sw.WriteLine(currtime + " Can't start script.");
                }   
            }
        }
 
        public void checkSysTime(object sender, System.Timers.ElapsedEventArgs args)
        {
            DateTime time = DateTime.Now;
            string currtime = time.ToString("[ MM/dd/yyyy H:mm:ss tt ]");
            string ampm = time.ToString("tt");
            int currhour = time.Hour;
            int currminute = time.Minute;
            if (currminute == 33)
            {
                eventLog1.WriteEntry("Current minute: " + currminute.ToString());
                eventLog1.WriteEntry("Runnng task");
                this.RunTask(currtime);
            }
        }
 
        protected override void OnStart(string[] args)
        {
            eventLog1.WriteEntry("OnStart");
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Interval = 60000; // 1 min
            timer.Elapsed += new System.Timers.ElapsedEventHandler(this.checkSysTime);
            timer.Start();
        }
 
        protected override void OnStop()
        {
            eventLog1.WriteEntry("onStop");
        }
 
        public EventLog eventLog1 { get; set; }
    }
}
0
1448 / 840 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
26.01.2016, 19:33 12
Цитата Сообщение от kloopa Посмотреть сообщение
Даже если вызвать ошибку нарочно, то файл лога ошибки все равно не создает
try catch ошибки процесса не ловит.

Подписывайся на события:
1) https://msdn.microsoft.com/ru-... .110).aspx
2) https://msdn.microsoft.com/ru-... .110).aspx

и пиши всё в лог!

Добавлено через 1 минуту
WindowStyle убери
1
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 42
26.01.2016, 20:37  [ТС] 13
Заработало. По ходу проблема была в том, что в 64-битной системе, скрипты запускались из system32. Перенес в %windr% - работает.
Благодарю за помощь. Отладочные логи полюбому пригодятся!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2016, 20:37

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Запуск скрипта с правами администратора для юзера
Всем привет. Нужна помощь. Имеются два небольших скрипта: один включает автоматическую установку ip...

Запуск скрипта с правами локального администратора на удалённом компьютере
Доброго времени суток. Запускаю скрипт на удаленном компьютере и передаю именя доменного...

Запуск программы без прав администратора скриптом, запущенным с правами администратора
Добрый день. Запускаю скрипт с правами администратора. Тот в свою очередь запускает программу, как...

Запуск из программы с админскими привилегиями внешней программы без прав админа
Нужно в программе которая запущенна под амином запустить другую программу без прав админа.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.