2016-11-02 28 views
1

我想找到一种方法来在我的WPF应用程序中运行CMD过程,而无需将CMD应用程序写入用户的临时目录。调用安装在用户目录中的资源

我已经创建的应用程序本质上是执行另一个CMD应用的包装和意图如下:

  1. 将应用程序安装到用户的Program Files目录。
    • 应用程序安装的目录还会有一个文件夹,标记为可容纳CMD应用程序(upgrade.exe)的资源和CMD应用程序需要的文件(image.bin)。
  2. 从桌面快捷方式或从开始菜单运行应用程序。
  3. 当应用程序需要时,从它所在的Program Files位置(“C:\ Program Files \ appname \ resources \ upgrade.exe”)调用upgrade.exe CMD应用程序。

我现在所拥有的是将文件写入用户临时目录然后从那里运行它的代码(代码如下)。这两个文件都作为资源添加到我的解决方案中,但如果我需要与他们做不同的事情来使用它们,那就没有问题了。我不知道是否有办法确切地知道上面描述的位置,但是,如果有,我该如何改变我的代码以便这样工作?

 path = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "upgrade.exe"); 
     File.WriteAllBytes(path, Properties.Resources.upgrade); 
     imagepath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "image.bin"); 
     File.WriteAllBytes(imagepath, Properties.Resources.image); 
     ProcessStartInfo processSetup = new ProcessStartInfo(path) 
     { 
      WorkingDirectory = System.IO.Path.GetTempPath(), 
      Arguments = String.Format("-F -p {0} -f image.bin, UserComPort), 
      UseShellExecute = false, 
      CreateNoWindow = true, 
      RedirectStandardError = true, 
      RedirectStandardOutput = true 
     }; 
     update = Process.Start(processSetup); 

,因为它使我的文件到不同的位置,我想他们在用户的PC上永久居住,我不喜欢这种方法,尽管我知道我可以将它们删除我完成后使用它们。

任何帮助将不胜感激。

编辑:如下所示,正确的解决方案是使用AppDomain.CurrentDomain.BaseDirectory位置,然后将已知的目录位置追加到该路径。你必须知道你的资源将在你的程序的目录结构中使用这种方法(我使用Inno Setup并定义了我希望这些资源驻留的“Dir”)。最终的解决方案是如下:

​​

这导致在不需要文件写入到用户的PC上的新位置更清洁的解决方案。感谢Phil N DeBlanc提供此解决方案!

回答

1

如果我明白你在问什么,我想你可以找到一个解决方案here。您可以获取当前正在执行的目录,然后将必要的剩余路径信息附加到您的CMD目录。

+0

我想这是正确的实现。基本上我会提取当前目录(这将是用户决定安装我的应用程序的目录),然后将“\ resources \ upgrade.exe”附加到路径以获得我想要的文件。我会玩这个方法,但我敢肯定这是正确的答案。非常感谢! – H0ckeyfr33k99

+0

这是一个完美的实现。我将用解决方案编辑我的代码。 – H0ckeyfr33k99

+0

很高兴听到! –

相关问题