Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

Ksanatos

C# создание службы

Рекомендуемые сообщения

Не надо спрашивать меня зачем :) Но необходимо реализовать Службу (Windows Service) в MS VS.NET 2008, которая просто по таймеру, кажые n секунд очищает системный буфер обмена

 

Написал скелет по рекомендации отсюда.

в событие ClbTimer_Elapsed вставляю код записи счетчика попыток очистки в лог и вызов Clipboard.Clear(); namespace с функциями для буфера обмена подключен.

Лог пишется нормально (что говорит о том, что таймер в службе запускается, обработчик тоже работает), а вот буфер не очищается.При всем при этом, в отдельном приложении та же функция очистки клипборда работает отлично (определяю по вечно затененному пункту меню "вставить" в блокноте и пейнте сразу после копирования текста или куска изображения). Вот код программы

		private void buttonStart_Click(object sender, EventArgs e)
	{
		Cleartimer.Interval = 1000;
		Cleartimer.Start();
	}

	private void buttonStop_Click(object sender, EventArgs e)
	{
		Cleartimer.Stop();
	}

	private void Cleartimer_Tick(object sender, EventArgs e)
	{
		Clipboard.Clear();
	}

 

Почему тот же самый вызов Clipboard.Clear() не работает в коде службы Windows?

Есть подозрение, что не работает потому, что служба запускается от имени LocalSystem\NetworkService\LocalService, а буфер обмена доступен только текущему пользователю. Потому его и видит приложение, запущенное от имени пользователя, и не видит служба

 

Вывод - нужно запускать службу от имени пользователя? но как? Ставлю в свойстве ProcessInstaller.Account значение User, при установке службы выдается окно с просьбой ввести Имя пользователя или пароль. Ввожу данные реально существующих в моей системе учеток - выдает ерроры - пишет, что "имя учетной записи не существует" - для первой, ограниченной, учетки, либо что-то совсем страшное - "Именам пользователей не сопоставлены коды защиты данных" - для второй, админской. :( Учетка пользователя пароля не имеет, админская - имеет.

 

Подскажите - как мне решить мою проблему с пользователями!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробуйте с помощью средств WinAPI чистить буфер, MSDN вам в помощь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Пробуйте с помощью средств WinAPI чистить буфер, MSDN вам в помощь

Проблема не в очистке буфера, а в доступе к буферу обмена конкретного пользователя. Приложение запущенное от лица пользователя той же функцией вполне нормально чистит буфер по таймеру. А служба, запущенная от LocalSystem\LocalService не видит буфер обмена текущего пользователя.

 

Впрочем я уже почти решил проблему альтернативным путем - без использования служб

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я думал вся соль как раз в службах :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты