CMD.EXE был запущен с приведенным выше путем так как текущий каталог UNC пути не поддерживаются по умолчанию для каталога windows
Я попытался запустить bat-файл на сетевом сервере, но когда я его отлаживаю, он выдает ошибку, что UNC-пути не поддерживаются, я попытался запустить bat-файл в локальной системе, он работает нормально, но не на сетевом сервере
что же мне делать?
заранее спасибо.
Я прилагаю свой код ниже.
Файл service1.в CS
public partial class Service1 : ServiceBase { private Timer timer1 = null; public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { timer1 = new Timer(); this.timer1.Interval = 60000; //60 sec this.timer1.Elapsed +=new System.Timers.ElapsedEventHandler(this.timer1_Tick); timer1.Enabled=true; Library.WriteErrorLog("test windows service started"); var result = RunProcess(@"\\192.168.124.30\IT\WebCommon\webfolder" /*the network path*/, "webupknvp.Bat", "cmd.exe", false); // my path C:\Abhay\batfile if (result == 0) { // success Console.WriteLine("Sucess"); } else { // failed ErrorLevel / app ExitCode Console.WriteLine("failed try again"); } } protected override void OnStop() { timer1.Enabled = false; Library.WriteErrorLog("Test Service ended"); } public void timer1_Tick(object sender, ElapsedEventArgs e) { //job /* var result = RunProcess(@"C:\Abhay\batfile", "webupknvp.Bat", "", false); if (result == 0) { // success Console.WriteLine("Sucess"); } else { // failed ErrorLevel / app ExitCode Console.WriteLine("failed try again"); } */ } public int RunProcess(string workDir, string appName, string args, bool hide = false) { // Process proc = null; Process proc = new Process(); // string batrun = string.Format("/c" + @"C:\Abhay\batfile", "cmd.exe"); // or @"C:\Abhay\batfile" in the end ("cmd.exe", "/c" + @"C:\Abhay\batfile") proc.StartInfo.UseShellExecute = false; //addition args = "/c"; appName = "cmd.exe"; workDir = @"\\192.168.124.30\IT\WebCommon\webfolder"; proc.StartInfo.WorkingDirectory = workDir;//batrun proc.StartInfo.FileName = appName; proc.StartInfo.Arguments = args; proc.StartInfo.CreateNoWindow = hide; proc.Start(); proc.WaitForExit(); return proc.ExitCode; }
Библиотека. cs
public static class Library { public static void WriteErrorLog(Exception ex) { StreamWriter sw = null; try { sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\ Logfile.txt", true); sw.WriteLine(DateTime.Now.ToString() + ":" + ex.Source.ToString().Trim() + ";" + ex.Message.ToString().Trim()); sw.Flush(); sw.Close(); } catch { } } public static void WriteErrorLog(string Message) { StreamWriter sw = null; try { sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\ Logfile.txt", true); sw.WriteLine(DateTime.Now.ToString() + ":" + Message); sw.Flush(); sw.Close(); } catch { } }
Программа. cs
static void Main(String[] args) { // Initialize the service to start ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1() }; // In interactive mode ? if (Environment.UserInteractive) { // In debug mode ? if (System.Diagnostics.Debugger.IsAttached) { // Simulate the services execution RunInteractiveServices(ServicesToRun); } else { try { bool hasCommands = false; // Having an install command ? if (HasCommand(args, "install")) { ManagedInstallerClass.InstallHelper(new String[] { typeof(Program).Assembly.Location }); hasCommands = true; // Having a start command ? if (HasCommand(args, "start")) { foreach (var service in ServicesToRun) { ServiceController sc = new ServiceController(service.ServiceName); sc.Start(); sc.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(10)); } hasCommands = true; } } // Having a stop command if (HasCommand(args, "stop")) { foreach (var service in ServicesToRun) { ServiceController sc = new ServiceController(service.ServiceName); sc.Stop(); sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10000));// change } hasCommands = false; } // Having an uninstall command if (HasCommand(args, "uninstall")) { ManagedInstallerClass.InstallHelper(new String[] { "/u", typeof(Program).Assembly.Location }); hasCommands = true; } // If we don't have commands we print usage message if (!hasCommands) { Console.WriteLine("Usage : {0} [command] [command ...]", Environment.GetCommandLineArgs()); Console.WriteLine("Commands : "); Console.WriteLine(" - install : Install the services"); Console.WriteLine(" - uninstall : Uninstall the services"); } } catch (Exception ex) { var oldColor = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error : {0}", ex.GetBaseException().Message); Console.ForegroundColor = oldColor; } } } else { // Normal service execution ServiceBase.Run(ServicesToRun); } } static void RunInteractiveServices(ServiceBase[] servicesToRun) { Console.WriteLine(); Console.WriteLine("Start the services in interactive mode."); Console.WriteLine(); // Get the method to invoke on each service to start it MethodInfo onStartMethod = typeof(ServiceBase).GetMethod("OnStart", BindingFlags.Instance | BindingFlags.NonPublic); // Start services loop foreach (ServiceBase service in servicesToRun) { Console.Write("Starting {0} ... ", service.ServiceName); onStartMethod.Invoke(service, new object[] { new string[] { } }); Console.WriteLine("Started"); } // Waiting the end Console.WriteLine(); Console.WriteLine("Press a key to stop services and finish process..."); Console.ReadKey(); Console.WriteLine(); // Get the method to invoke on each service to stop it MethodInfo onStopMethod = typeof(ServiceBase).GetMethod("OnStop", BindingFlags.Instance | BindingFlags.NonPublic); // Stop loop foreach (ServiceBase service in servicesToRun) { Console.Write("Stopping {0} ... ", service.ServiceName); onStopMethod.Invoke(service, null); Console.WriteLine("Stopped"); } Console.WriteLine(); Console.WriteLine("All services are stopped."); // Waiting a key press to not return to VS directly if (System.Diagnostics.Debugger.IsAttached) { Console.WriteLine(); Console.Write("=== Press a key to quit ==="); Console.ReadKey(); } } static bool HasCommand(String[] args, String command) { if (args == null || args.Length == 0 || String.IsNullOrWhiteSpace(command)) return false; return args.Any(a => String.Equals(a, command, StringComparison.OrdinalIgnoreCase)); } } }
Что я уже пробовал:
Я застрял здесь, понятия не имея, как это решить.
Richard MacCutchan
Сообщение говорит вам, в чем проблема, вы не можете использовать UNC-пути.
r.abhaysinghania
ладно, можно ли это решить?
Richard MacCutchan
Да, не используйте UNC-пути.
[no name]
В любом случае, почему вы запускаете cmd для выполнения bat-файла?
r.abhaysinghania
служба windows запускает bat-файл через cmd, теперь я пытаюсь заставить его работать на сетевом сервере.
[no name]
И это отвечает на вопрос, как?