Запуск bat файла в другой ОС - C#
Формулировка задачи:
Здравствуйте, уважаемые программисты! Я по такому вопросу. Вот код программы:
Этот код работает успешно на моей ОС (Windows 10) на которой писал и собирал данный проект. Но когда загружаюсь в Windows 8.1, копирую с флешки свои 2 экзешника (.exe) то бат файл почему-то не срабатывает в ходе выполнения программы, следовательно, служба не устанавливается... Хотя с флешки если запускать программу (в той же Windows 8.1) то все шикарно.. программа полностью работает... Как видите из кода, запускаю программу от имени администратора. Почему на 8.1 у меня программа отказывается работать? .NET 4.5.2 стоит и на одной и на другой ОС.
P.S. Извините если не в тот раздел тему пишу
class Program { static string inst = "inst.bat"; static string unst = "unst.bat"; static void Main(string[] args) { WindowsPrincipal wp = new WindowsPrincipal(WindowsIdentity.GetCurrent()); bool adm = wp.IsInRole(WindowsBuiltInRole.Administrator); if (!adm) { ProcessStartInfo psi = new ProcessStartInfo(); psi.UseShellExecute = true; psi.FileName = Assembly.GetExecutingAssembly().Location; psi.Verb = "runas"; Process.Start(psi); Environment.Exit(0); } else Console.WriteLine("admin"); string pf = null; checkfile(ref pf); if (!File.Exists(inst) && pf != null) { File.WriteAllText(inst, pf+" ""+ Environment.CurrentDirectory + "\\WindowsService1.exe""); File.WriteAllText("inst.txt", pf + " "" + Environment.CurrentDirectory + "\\WindowsService1.exe""); } if (!File.Exists(unst)) { File.WriteAllText(unst, pf +" /u ""+ Environment.CurrentDirectory + "\\WindowsService1.exe""); File.WriteAllText("unst.txt", pf + " /u "" + Environment.CurrentDirectory + "\\WindowsService1.exe""); } string com = Console.ReadLine(); if (com == "i") { ProcessStartInfo pi = new ProcessStartInfo(); pi.WorkingDirectory = Environment.CurrentDirectory; pi.FileName = pi.WorkingDirectory + "\" +inst; Process.Start(pi); } if (com == "u") { ProcessStartInfo pi = new ProcessStartInfo(); pi.WorkingDirectory = Environment.CurrentDirectory; pi.FileName = pi.WorkingDirectory + "\" + unst; Process.Start(pi); return; } com = Console.ReadLine(); if (com == "s") { ServiceController sv = new ServiceController("MyServ"); sv.Start(); } Console.ReadKey(); } static void checkfile(ref string pf) { if (File.Exists("C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\InstallUtil.exe")) { pf = "C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\InstallUtil.exe"; return; } if (File.Exists("C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\InstallUtil.exe")) { pf = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\InstallUtil.exe"; return; } } }
Ребят, в общем частично проблема решилась. Суть была в том что в 8.1 пользователь у меня на русском языке прописан... соответственно, путь содержал русские символы... Тогда следующий вопрос, как сделать чтобы русские символы поддерживались?
Решение задачи: «Запуск bat файла в другой ОС»
textual
Листинг программы
Encoding oemEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage); File.WriteAllText("my.bat", "echo Привет", oemEncoding);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д