作为我正在编写的小程序的一部分,我需要逐步添加项目到menustrip。主应用程序将在拇指驱动器上运行,我希望用户输入aditional第三方应用程序的名称,然后浏览到他们的可执行文件。一旦我知道了位置,我就想将应用名称添加到menustrip中,让他们能够使用menustrip项目作为捷径。
我的问题是启动应用程序的最佳方式是什么。我可以在菜单中添加项目,但我不确定如何让它们实际指向应用程序。它也需要持久化。我应该用XML或其他东西存储应用程序名称和路径,并根据menustrip的值查找路径?我觉得我应该知道这个问题的答案,但也许我只是从错误的角度来看待它。
答案 0 :(得分:1)
您可能希望使用System.Diagnostics.Process
更具体地说,您需要使用允许您从流程获得反馈的流程信息对其进行初始化。
创建一个包装逻辑的方法,并允许您输入命令行参数以及可执行路径。 (记住路径的引用等)。
public void LaunchApplication(string fullPath, string args)
{
System.Diagnostics.Process AppLaunch = new System.Diagnostics.Process();
AppLaunch.Exited += new EventHandler(Process_Exited);
AppLaunch.EnableRaisingEvents = true;
AppLaunch.StartInfo.UseShellExecute = false;
AppLaunch.StartInfo.RedirectStandardOutput = true;
AppLaunch.StartInfo.RedirectStandardInput = true;
AppLaunch.StartInfo.RedirectStandardError = true;
AppLaunch.StartInfo.Arguments = args;
AppLaunch.StartInfo.FileName = fullPath;
AppLaunch.Start();
}
通过处理退出事件并重定向输出和输入,您可以更好地控制流程。 UseShellExecute
确定是否有应用程序启动时显示的命令窗口(true表示它将显示)。
您可以在MSDN上找到该文档: https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo(v=vs.110).aspx
使用此方法可以让您在处理关闭应用程序的用户方面获得很多自由。或者,如果应用程序需要特殊身份验证,您可以使用以下内容设置这些值:
System.Security.SecureString securePass = new
System.Security.SecureString();
foreach (char c in password)
{
securePass.AppendChar(c);
}
AppLaunch.StartInfo.Domain = domain;
AppLaunch.StartInfo.UserName = user;
AppLaunch.StartInfo.Password = securePass;
我可能会坚持使用XML中的应用程序路径和参数。我需要的任何用户凭据都可能以某种存储格式存储加密(和模糊处理)。虽然我很确定它不被认为是最好的方法"但我在过去也使用过XML,其元素的命名方式如下:
<value-x>{encryptedUserName}</value-x>
<value-y>{encryptedDomainName}</value-y>
<value-z>{encryptedPassword}</value-z>