[英]Installer Project Custom Actions - Specify working directory
我有一個作為Visual Studio Installer項目部署運行的自定義操作。
是否可以相對於安裝目錄指定此自定義操作的工作目錄?
編輯
澄清
我有一個安裝程序項目,它作為自定義操作來運行程序。 我想從安裝程序項目中指定該程序的工作目錄,因此,當程序在安裝過程中運行時,它將與創建安裝程序時指定的工作目錄一起運行。
工作目錄 :這是EXE自定義操作嗎? Visual Studio Installer項目中的自定義操作以deferred mode, system context
運行deferred mode, system context
,這意味着它們以System
/ LocalSystem
身份運行。 老實說,我不確定該如何處理“ working folder
”。 我認為這只是意味着工作文件夾位於運行可執行文件的位置。
VS Installer項目的局限性 :Visual Studio Installer項目缺乏完全配置高級設置的能力。 有一種方法可以運行EXE文件並指定工作文件夾,但這些項目不支持該方法。 我也不確定在我們知道您的實際運行之前,是否可以解決您的問題。 可能是腳本。 這些安裝程序項目存在幾個主要問題 。
自定義操作 : 類型34自定義操作允許您Run an EXE file having a path referencing a directory
。 您要么需要使用Orca來修復輸出MSI,要么使用諸如WiX之類的實際部署工具或等效的商業選項 。 盡管我沒有嘗試過,但是WiX應該能夠完成您想要的事情-所有其他主要的商業選擇也應該這樣做。
修補程序 :MSI修補程序有些復雜,這意味着您必須向CustomAction Table
和InstallExecuteSequence Table
添加條目。 如果二進制文件是要在安裝后運行的文件,或者是磁盤上已經存在的文件,則無需將二進制文件添加到二進制表中 。 您需要為自定義操作列Type
設置許多標志,這些標志與該操作是同步還是異步運行,是否要因錯誤而中止,它將以什么順序運行以及類似的東西有關。 您組合位字段。
您可以在命令行參數上將工作目錄傳遞到程序中,但前提是程序設計為采用該值並將其用作其工作目錄。 另外,程序也可以使用以下代碼導出其運行目錄:
> 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不會這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.