0

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在给定路径上创建的(在安装时)。我应该如何将文件从复制directorySourcePath

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

更新

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

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

它试图从program files目录中选择文件。但它应该与我所在的目录相同exe。我不想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

4

2 回答 2

5

如果您想将 myFile.exe 从“目录”位置复制到“SourcePath”。

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

File.Copy(sourceFileName, destFileName);

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

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

string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
于 2013-02-25T13:37:38.223 回答
0

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

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

现在看看 C:\EXTRACT。您将看到未压缩的 MSI 和文件目录结构。使用要部署的文件覆盖 CER 文件。现在在机器上运行该 MSI 并记下部署了哪个 CER 文件。

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

于 2013-02-25T17:54:38.577 回答