如何在安装exe时将文件复制到指定的路径

本文关键字:复制 路径 文件 安装 exe | 更新日期: 2023-09-27 18:00:52

我必须将位于exemsi installer所在的同一文件夹中的文件(在安装时(复制到不同的路径。为此,我在installer类中编写了以下代码。

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new     
System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "xcopy";
startInfo.UseShellExecute = true;
string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string SourcePath = Path.GetFullPath("C:''Program Files (x86)''Microsoft SDKs''Windows''v7.0A''Bin");
StreamWriter sw = new StreamWriter(@"C:'Users'lovestone'Desktop'data.txt");
sw.WriteLine(directory);
sw.WriteLine(SourcePath);
startInfo.Arguments = "'"" + directory + "'"" + " " + "'"" + SourcePath + "'"" + @" /e /y /I";
process.StartInfo = startInfo;
process.Start();

我对installer类没有任何问题,因为它正在给定路径上创建data.txt(在安装时(。我应该如何将文件从directory复制到SourcePath

我应该使用cmd而不是xcopy吗?

已更新

正如我提到的,我想从存在exeinstaller的同一文件夹中复制一个文件。当我安装应用程序时。它显示一个错误:

Unable to find the file from "C:'Program Files (x86)'Default Company Name'inataller". 

它正在尝试从program files目录中选取文件。但它应该与我的CCD_ 13所在的目录相同。我不想hard-coded exe的路径,因为它会分发给其他客户端。从同一文件夹中提取文件的合适代码是什么?

我在代码中做了一些更改

string directory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
string SourcePath = Path.GetFullPath("C:''Program Files (x86)''Microsoft SDKs''Windows''v7.0A''Bin");
File.Copy(Path.Combine(directory, "MyAdHocTestCert.cer"),Path.Combine(SourcePath, "MyAdHocTestCert.cer"));

现在显示:Object reference not set to an instance of an object

如何在安装exe时将文件复制到指定的路径

如果您想将myFile.exe从"directory"位置复制到"SourcePath"。

string sourceFileName = Path.Combine(directory, "myFile.exe");
string destFileName = Path.Combine(SourcePath, "myFileCopy.exe");
File.Copy(sourceFileName, destFileName);

sourcefilename只是要复制的文件的位置,destFileName是要将其复制到的目标位置。包括filename。

至于获取exe的位置,您可以使用

string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

忽略到目前为止所做的操作,创建一个新的安装程序并像往常一样将证书文件写入其中。构建MSI并运行命令:

msiexec /a foo.msi TARGETDIR=C:'EXTRACT /qb

现在来看一下C:''EXTRACT。您将看到未压缩的MSI和文件的目录结构。用要部署的文件覆盖CER文件。现在在机器上运行MSI,并注意部署了哪个CER文件。

真的应该这么简单。如果你使用更好的工具,如InstallShield或WiX,你可以构建一个部分压缩的MSI和未压缩的单个文件。MSI调用的DLL调用的CMD调用的XCOPY不需要所有这些可怕的自定义操作反模式。顺便说一句,你知道VDPROJ是从VS2012中删除的,对吧?