在ClickOnce应用中运行打包的Python脚本

0 投票
1 回答
1096 浏览
提问于 2025-04-21 09:56

我正在尝试从一个WPF应用程序运行一个Python脚本,但我不知道怎么在客户端机器上找到这个文件。我知道ClickOnce会把文件安装到AppData\Local\目录下,但这样找脚本似乎不太方便。

在我的代码中,我是这样启动一个命令行的:

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();

在我的开发机器上,如果我把WorkingDirectory参数设置为项目路径,所有的东西都能正常工作,因为Python脚本就在那个地方。

我把这个脚本包含在ClickOnce的文件清单中,并且确认它在每个版本的应用程序部署中都存在。我还确认这个文件在客户端机器上以一种混淆的结构存在,所以一切都准备好了,只是我无法让我的WPF应用程序真正运行它。我可以把文件复制到机器上的一个已知位置,但那样就完全失去了ClickOnce的意义。

如果有任何建议,我将非常感激。

1 个回答

0

我把这个搞定了,但我不太确定具体是怎么做到的。无论如何,我把我做的事情分享出来,希望能帮到其他人。

不要设置进程的工作目录(我在问题中已经注释掉了这部分)。

把Python脚本的属性设置成这样:

  1. 构建操作 = 内容
  2. 复制到输出目录 = 始终复制

在项目属性的发布选项卡中,把脚本设置为 包含 在应用程序文件中。

做了以上这些修改后,我的应用程序在客户机器上可以正确部署了。

撰写回答