如何在安装exe时将文件复制到指定的路径
本文关键字:复制 路径 文件 安装 exe | 更新日期: 2023-09-27 18:00:52
我必须将位于exe
和msi 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
吗?
已更新
正如我提到的,我想从存在exe
和installer
的同一文件夹中复制一个文件。当我安装应用程序时。它显示一个错误:
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
如果您想将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中删除的,对吧?