2012-08-06 55 views
1

我对使用C#很陌生,目前仅将它用于工作目的。我正在编辑一个现有的应用程序,并试图添加一个函数来调用我写的批处理文件。此批处理文件运行CLI程序并执行一些错误级别检查以确保程序正确执行并将任何错误报告给命令提示符。我不想在C#中重写这个函数,因为当我在没有主程序的情况下执行这个任务时,这个批处理文件对我很有用。但是,如果需要在C#中重写此批处理文件的功能,我不知道如何去做。关于从C#程序调用批处理文件的建议

我发现这个代码在网上运行我的批处理文件,它工作得很好:

 System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
     proc.EnableRaisingEvents = false; 
     proc.StartInfo.FileName = "C:mypath\\mybatfile.bat"; 
     proc.Start(); 

我这段代码唯一的问题是它需要我之前,我部署的应用程序来设置此路径。我将把这个应用程序分发给其他一些机器,并最终可能将其分发给更多。我真的很想找到一种方法,以某种方式将此路径链接到程序保存的位置,并将该批处理文件包含在应用程序的资源中。

这一切都可能是非常基地,并提供任何方向将不胜感激。

我对C#和其他PC编程中使用的术语知之甚少,因为我的大部分经验都在uControllers中。

编辑:我的程序是一个GUI .xaml应用程序。我也决定用C#重写我的批处理文件,因为我在我的批处理文件中也有一些我忘记的路径。有没有办法运行命令提示符应用程序并传递命令行参数并轻松检查错误级别?

编辑2:我加入这只是为了帮助任何未来的这个线程来。这是我最终如何解决我的问题,使用下面的Dantix的建议:

 System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
     proc.EnableRaisingEvents = false; 
     string bat_path = System.Reflection.Assembly.GetExecutingAssembly().Location; 
     proc.StartInfo.FileName = bat_path.Replace("\\myAppName.exe, "") + "\\myBatchFile.bat"; 
     proc.Start(); 

感谢您的所有帮助!

+0

你怎么部署的应用?如果您使用的是msi或类似的东西,那么您可以在此创建路径作为设置。 – Brian 2012-08-06 17:30:23

+0

我不知道我将如何部署应用程序。我真的没有那么远。我想不必使用msi,因为我们经常只是将应用程序作为可执行文件与相关文件共享。我并不完全反对这个想法,只是不知道如何完成它。 – Menimitz 2012-08-06 19:52:45

回答

0

也许你可以使用application settings或者如果你的程序是一个控制台应用程序,你可以使用command-line arguments

+0

我的程序是使用.xaml的GUI应用程序。我也更新了这个问题,以扩大我对更好的解决方案的希望。 – Menimitz 2012-08-06 20:02:08

3

你可以使用Application.StartupPath获取用于启动应用程序,不包括可执行文件名称的可执行文件的路径。

根据您的要求,它可能是
proc.StartInfo.FileName = Application.StartupPath +"\\mybatfile.bat";

+0

由于某种原因,此解决方案对我无效。错误'System.Windows.Application'没有包含'StartupPath'的定义\t 向我的问题添加更多细节:它是一个使用.xaml的GUI应用程序。我需要添加另一个使用SomeSpace线来使用它吗? – Menimitz 2012-08-06 19:55:34

+1

Assembly.GetExecutingAssembly()。位置应该为您提供您的应用程序路径 – dantix 2012-08-06 20:13:09

+0

Dantix - 使用您的建议还返回了我正在运行的可执行文件的名称。所以要解决这个问题我使用:string bat_path = System.Reflection.Assembly.GetExecutingAssembly()。Location; proc.StartInfo.FileName = bat_path.Replace(“\\ myAppName.exe”,“”)+“\\ mybatchfile.bat”; – Menimitz 2012-08-07 12:34:57

相关问题