压缩文件后(它们从 Visual Studio 中的文件路径引用打开),如何让我的应用程序从单独的 Winform 打开? (C#)

Posted

技术标签:

【中文标题】压缩文件后(它们从 Visual Studio 中的文件路径引用打开),如何让我的应用程序从单独的 Winform 打开? (C#)【英文标题】:How do I get my app to open from a separate Winform once I ZIP the files (they open from a file path reference in Visual Studio)? (C#) 【发布时间】:2020-04-25 22:17:16 【问题描述】:

我尝试了几种措辞,但找不到我正在寻找的答案,如果之前已经回答过,我深表歉意。

我已经制作了基本的网络浏览器、计算器和记事本应用程序,并希望它们可以从一个表单中打开。我现在可以很好地打开它们,但是我的代码引用了应用程序所在的文件路径。如何编写代码以便这些应用程序在转移到另一台计算机时打开? IE。找不到文件路径。这是我目前工作的代码:

private void button1_Click(object sender, EventArgs e)

    System.Diagnostics.Process.Start("C:\\Users\\Student User\\source\\repos\\Calculator2\\Calculator2\\bin\\debug\\Calculator2.exe");


private void button2_Click(object sender, EventArgs e)

    System.Diagnostics.Process.Start("C:\\Users\\Student User\\source\\repos\\WebAppUni1\\WebAppUni1\\bin\\Debug\\WebAppUni1.exe");


private void button3_Click(object sender, EventArgs e)

    System.Diagnostics.Process.Start("C:\\Users\\Student User\\source\\repos\\UniTextApp\\UniTextApp\\bin\\Debug\\UniTextApp.exe");

是否只是压缩后将文件路径更改为新目标的情况?谢谢!

【问题讨论】:

显然你有办法将这四个应用程序部署为一个包。那会是什么? 我不知道我对编码很陌生,这是我的第一个 uni 项目,以前没有编码。你知道吗? 查看post 所以当您说“压缩文件”时,您的意思是打开C:\Users\Student User\source\repos 并将整个Calculator2WebAppUni1UniTextApp 文件夹压缩到一个存档中? 哪些“文件”?您手动挑出四个可执行文件并压缩它们,然后用户将它们解压缩到同一个文件夹?然后System.Diagnostics.Process.Start("Calculator2.exe"). 【参考方案1】:

什么会阻止某人将应用程序部署到不同的目录甚至磁盘?您无法知道他们将在哪里安装它,除非您提供的安装程序可以正确安装并在注册表中写入安装位置。然后您可以从注册表中读取此位置,并在您的应用程序中使用它。

所以:提供安装程序。

【讨论】:

好吧,我不知道该怎么做,所以我猜想阅读一下。 这根本不是我想做的。我最终将应用程序的所有 .exe 文件放在启动器表单的调试文件夹中,并使用了System.Diagnostics.Process.Start(System.IO.Path.Combine("Calculator2", "Calculator2.exe"));【参考方案2】:

如何编写代码,以便在传输时打开这些应用程序 到另一台电脑? IE。找不到文件路径。

如果你想要访问相同的路径,只是改变用户的主目录,你可以在路径中使用%userprofile%。示例:

%userprofile%\desktop
%userprofile%\documents

更多选项在这里: What is the alternative for ~ (user's home directory) on Windows command prompt?

【讨论】:

不,它们将被压缩并从记忆棒打开,因此路径将完全不同,这就是我遇到的问题。 在这种情况下,唯一可以确定的方法是在程序启动时向用户询问路径或扫描所有可移动存储设备以获取压缩文件的名称。【参考方案3】:

有一些方法可以解决这个问题。 考虑到您不想将应用程序定位在与主应用程序相同的文件夹结构中,

1) 您可以替换System.Diagnostics.Process.Start("C:\\Users\\Student User\\source\\repos\\UniTextApp\\UniTextApp\\bin\\Debug\\UniTextApp.exe"); 中的位置字符串 使用一个实际变量,其值根据需要进行初始化。如果在第一次尝试中没有找到,那么您可以使用浏览表单来查找丢失的文件。 2) 使用外部设置文件来设置不同应用程序的位置。

如果您可以将应用程序定位在与主应用程序相同的文件夹结构中,那么在我看来,最简单的方法是使用相对路径。

例如

..\\..\\..\\..\\UniTextApp\\UniTextApp\\bin\\Debug\\UniTextApp.exe

【讨论】:

以上是关于压缩文件后(它们从 Visual Studio 中的文件路径引用打开),如何让我的应用程序从单独的 Winform 打开? (C#)的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 拓展插件——Image Optimizer

我的visual studio快过期了!怎么办?

从Visual Studio 2015出版物中排除文件夹

从文件中读取数据并将其写入不同的文件(Visual Studio 2012)

是啥导致 Visual Studio 2017 中的文件名为空

MSBuild:从 Visual Studio 中构建解决方案后运行目标