Запуск 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);