C# 在clickonce应用程序中运行捆绑的python脚本

C# 在clickonce应用程序中运行捆绑的python脚本,c#,python,wpf,deployment,clickonce,C#,Python,Wpf,Deployment,Clickonce,我试图从WPF应用程序运行Python脚本,但我不知道如何在客户机上找到该文件。我知道ClickOnce会将文件安装到AppData\Local\,但这似乎不是搜索脚本的好方法 在我的代码中,我启动一个shell,如下所示: var p = new Process(); p.StartInfo.FileName = @"C:\Python27\python.exe"; p.StartInfo.Arguments = String.Format("{0} {1}", ScriptName, arg

我试图从WPF应用程序运行Python脚本,但我不知道如何在客户机上找到该文件。我知道ClickOnce会将文件安装到AppData\Local\,但这似乎不是搜索脚本的好方法

在我的代码中,我启动一个shell,如下所示:

var p = new Process();
p.StartInfo.FileName = @"C:\Python27\python.exe";
p.StartInfo.Arguments = String.Format("{0} {1}", ScriptName, args);
//p.StartInfo.WorkingDirectory = @"<path\to\project>";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
var p=新流程();
p、 StartInfo.FileName=@“C:\Python27\python.exe”;
p、 StartInfo.Arguments=String.Format(“{0}{1}”,脚本名,args);
//p、 StartInfo.WorkingDirectory=@;
p、 StartInfo.WindowStyle=ProcessWindowStyle.Hidden;
p、 StartInfo.CreateNoWindow=true;
p、 StartInfo.UseShellExecute=false;
p、 StartInfo.RedirectStandardOutput=true;
p、 Start();
字符串输出=p.StandardOutput.ReadToEnd();
p、 WaitForExit();
在我的开发机器上,如果我将
WorkingDirectory
参数设置为项目路径,那么它就可以正常工作,因为Python脚本就驻留在项目路径中

我将脚本包括在ClickOnce文件清单中,并且我已经验证了它最终会出现在应用程序部署的每个版本中。我还验证了该文件最终位于模糊层次结构中的客户机上,因此除了我无法让我的WPF应用程序实际运行它之外,一切都准备就绪。我总是可以将文件复制到机器上的已知位置,但这完全违背了ClickOnce的观点


如果您有任何想法,我将不胜感激。

我能做到这一点,但我不能100%确定如何做到这一点。不管怎样,我是这样做的,以防对其他人有所帮助

不要设置进程工作目录(在我的问题中已经注释掉) 按如下方式设置Python脚本属性:

var p = new Process();
p.StartInfo.FileName = @"C:\Python27\python.exe";
p.StartInfo.Arguments = String.Format("{0} {1}", ScriptName, args);
//p.StartInfo.WorkingDirectory = @"<path\to\project>";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
  • 构建操作=内容
  • 复制到输出目录=始终复制
  • 在“项目属性”下的“发布”选项卡中,将脚本设置为“在应用程序文件中包含”

    通过上述更改,我的应用程序可以在客户端机器上正确部署