Задача: сделать автозагрузку программы с админскими правами (установлена в Program Files). Программа использует Long Polling для установления длительного соединения с сервером, и по этому соединению получает команды (открыть окно в браузере при наступлении события).
Есть код, который должен создавать задания в планировщике заданий для каждого пользователя (или группы пользователей).
файл: \WindowsFormsApp1\WindowsFormsApp1\Installer1.cs
using (var computerEntry = new DirectoryEntry(path))
{
var userNames = from DirectoryEntry childEntry in computerEntry.Children
where childEntry.SchemaClassName == "User"
select childEntry.Name;
int i = 0;
foreach (var name in userNames)
{
using (TaskService ts = new TaskService())
{
try
{
string taskname = "MyProgramRun" + i.ToString();
TaskDefinition td = ts.NewTask();
td.RegistrationInfo.Description = "RUN MyProgram Every Logon";
td.Triggers.Add(new LogonTrigger { Delay = TimeSpan.FromSeconds(30) });
td.Actions.Add(new ExecAction(Context.Parameters["path"], null, null));
td.Principal.RunLevel = TaskRunLevel.Highest;
ts.RootFolder.RegisterTaskDefinition(taskname, td, TaskCreation.CreateOrUpdate, name, null, TaskLogonType.None);
}
catch { }
}
i++;
}
}
Данный код на обычном домашнем компе создает четыре задания в планировщике (по одному для каждого юзера); и во время загрузки системы срабатывает одно из правил, в зависимости от того под кем грузимся.
Однако на компьютере внутри организации, где компьютеры работают не в группе (например WORRKGROUP), а в локальном домене, задания для текущего юзера (который устанавливает программу) - не создается!
Вот задания, которые создает данный код, запускаемый на компьютере в локальном домене, из-под пользователя локального домена:
MyProgramRun0 - DefaultAccout (PC-NAME)
MyProgramRun1 - localusr (PC-NAME)
MyProgramRun2 - Администратор (PC-NAME)
MyProgramRun3 - Гость (PC-NAME)
Но задачи для нашего текущего юзера, под которым работает пользователь; под которым он устанавливает программу; и под которым эта программа должна грузиться - не создается.
При этом, юзер в группе Администраторы.
Как написать код, который будет создавать задания для пользователей домена, а не только для локальных пользователей?
Пользователь домена выглядит как: COMPANYNAME\user.name
Если положить исполняемый файл в реестр:
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
то программа просто не запускается, так как из реестра автозапуска с админскими правами сделать как я понял нельзя.
Варианта видится два:
1). Переписать программу с Long Polling таким образом, чтобы она не требовала админских прав (не уверен что это возможно)
2). Заставить программу создавать задачи в планировщике в том числе для пользователей домена
Кусок кода где создается соединение:
\WindowsFormsApp1\WindowsFormsApp1\LongPoll.cs
public void Poling() {
string url = IPs.Default.IPServer + IPs.Default.IPpoll;//Адресс сервера, куда отправляем запросы
string Respurl;
while (poll) {
try {
if (UserName != null && Password != null) {
string postString = String.Format("LoginForm[manager]={0}&LoginForm[password]={1}", Uri.EscapeDataString(UserName), Uri.EscapeDataString(Password));
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//создаем запрос к нашему серверу
request.Method = "POST";
StreamWriter requestWrite = new StreamWriter(request.GetRequestStream());//создаем поток для записи запроса
request.ContentType = "application/x-www-form-urlencoded";
requestWrite.Write(postString);
requestWrite.Close();
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();//отправляем запрос, получаем ответ
Stream dataStream = resp.GetResponseStream(); //поток для записи ответа
XmlDocument XdocTime = new XmlDocument();
XdocTime.Load(dataStream);//загружаем хмл док
XmlNode xNode = XdocTime.DocumentElement;
Respurl = xNode.FirstChild.InnerText;
Process.Start(IPs.Default.IPServer + Respurl);
} else { }
} catch { }
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый день! Уже целый день пытаюсь подружить Firebird с EntytiFramework и не получаетсяДелал всё по инструкции https://habrahabr
Есть сайт на котором присутствуют битые ссылки(которые ведут на 404), как с помощью C# найти эти ссылки и удалить адрес куда они ведут? То есть...
Разрабатываю расширение для firefox, возникла необходимость добавлять обработчик события при нажатии на определенный элемент на сайте
Есть вот такой код, который возвращает ошибку