我有一个自定义操作,可以作为Visual Studio Installer项目部署来运行。
是否可以相对于安装目录指定此自定义操作的工作目录?
修改
要澄清
我有一个安装程序项目,该程序以自定义操作的形式运行程序。我想从安装程序项目中指定该程序的工作目录,因此,当程序在安装过程中运行时,它将与创建安装程序时指定的工作目录一起运行。
答案 0 :(得分:0)
工作目录 :这是EXE自定义操作吗? Visual Studio Installer项目中的自定义操作在 deferred mode, system context
中运行-表示它们以 System
/ LocalSystem
运行>。老实说,我不确定这会对“ working folder
”产生什么影响。我认为这只是意味着工作文件夹位于可执行文件运行所在的位置。
VS安装程序项目限制 :Visual Studio安装程序项目无法完全配置高级设置。有一种方法可以运行EXE文件并指定工作文件夹,但这些项目不支持该方法。我也不确定在我们知道您的实际运行之前,是否可以解决您的问题。可能是脚本。 There are several major problems with these installer projects。
自定义操作 :A Type 34 Custom Action允许您Run an EXE file having a path referencing a directory
。您要么需要使用Orca或use a real-deployment tool such as WiX or an equivalent commercial options来修复输出MSI。尽管我没有尝试过,但是WiX应该能够执行您想要的操作-以及所有其他主要的商业选择。
修补程序 :MSI修补程序有些复杂,这意味着您必须向CustomAction Table
和InstallExecuteSequence Table
添加条目。如果二进制文件是要在安装后运行的文件,或者是磁盘上已经存在的文件,则无需将二进制文件添加到二进制表。您需要为自定义操作列 Type
设置许多标志,这些标志与操作是同步运行还是异步运行,是否要因错误中止而定,以什么顺序它会在其中运行。您组合位字段。
答案 1 :(得分:0)
您可以通过命令行参数将工作目录传递到程序中,但前提是程序设计为采用该值并将其用作其工作目录。另外,程序也可以使用以下代码导出其运行目录:
> public static string GetAssemblyPathByCodeBase() {
> string codeBase = Assembly.GetExecutingAssembly().CodeBase;
> UriBuilder uri = new UriBuilder(codeBase);
> return Path.GetDirectoryName(Uri.UnescapeDataString(uri.Path)); }
一般的问题是,从(例如)双击运行程序时,Explorer Shell将工作目录设置为托管目录。 Windows Installer不会这样做。