Я создал сервис, который «блокирует» фон рабочего стола, поэтому вы не можете его изменить. В общем, сервис сравнивает текущие обои с теми, которые я хочу, чтобы новые обои. Если это не то же самое, это перезаписывается. Это мой метод OnTimer (), который выполняется каждые 2 секунды:
private void OnTimer(object sender, ElapsedEventArgs e)
{
if (!File.Exists("C:/Program Files/image.jpg"))
{
Assembly myAssembly = Assembly.GetExecutingAssembly();
Stream s = myAssembly.GetManifestResourceStream("MsService.Gandalf.jpg"); ;
byte[] b;
using (BinaryReader br = new BinaryReader(s))
{
b = br.ReadBytes((int)s.Length);
}
while (true)
{
try
{
File.WriteAllBytes("C:/Program Files/image.jpg", b);
break;
}
catch (Exception)
{
//stuff
}
}
}
//{path} is %Appdata%
if (!FileEquals($"{path}\\Microsoft\\Windows\\Themes\\TranscodedWallpaper", "C:/Program Files/image.jpg"))
{
byte[] file = File.ReadAllBytes("C:/Program Files/image.jpg");
while (true)
{
try
{
File.WriteAllBytes($"{path}\\Microsoft\\Windows\\Themes\\TranscodedWallpaper", file);
break;
}
catch (Exception)
{
//stuff
}
}
}
}
Это метод FileEquals:
static bool FileEquals(string path1, string path2)
{
byte[] file1 = File.ReadAllBytes(path1);
byte[] file2 = File.ReadAllBytes(path2);
if (file1.Length == file2.Length)
{
for (int i = 0; i < file1.Length; i++)
{
if (file1[i] != file2[i])
{
return false;
}
}
return true;
}
return false;
}
Когда я запускаю службу, он только меняет обои если я изменю это активно, даже если это уже другой, который я хочу, и только один раз. Служба не выдает ошибок при отладке, и служба не обрабатывает sh. Также, когда я меняю обои, срабатывают точки останова в if (! File.Equals (...)). Вирусный сканер тоже ничего не предупреждает. Почему это все равно не работает?