2011-05-02 70 views
4

我得到威克斯和管理的自定義操作的一個問題:在我的自定義操作我創建了一個文件並將其保存在INSTALLLOCATION路徑。它似乎是有效的,沒有例外。但安裝之後,剛創建的文件不存在於INSTALLLOCATION中。維克斯:寫入文件中自定義操作

威克斯-文件:

<CustomAction Id="SetInstallPath" Property="CreateTimeStamp" Value="[INSTALLLOCATION]" 
    Execute="immediate"/> 
<CustomAction Id="CreateTimeStamp" BinaryKey="SetupActions.dll" 
    DllEntry="CreateTimeStampFile" Execute="deferred" Return="check"/> 
<InstallExecuteSequence> 
    <Custom Action="SetInstallPath" Before="InstallFinalize"/> 
    <Custom Action="CreateTimeStamp" Before="InstallFinalize"/> 
</InstallExecuteSequence> 

定製操作-了Methode:

... 
var keys = new string[session.CustomActionData.Keys.Count]; 
session.CustomActionData.Keys.CopyTo(keys, 0); 
var cad = keys[0]; 
var filepath = cad + "myfile.xml"; 
File.Create(filepath); 
... 

任何一個想法?

已編輯:在Scott Boettger的帖子後編輯了wix文件內容。

+1

你應該接受答案,一旦你有工作解決方案。這會在稍後幫助你讓更多的人願意幫助你。 – 2011-05-03 12:57:33

回答

7

我不認爲你的配置是正確的。這裏有一些問題:

  1. 你不應該在InstallExecuteSequence中使用私有屬性(CREATE_TIME_STAMP比CreateTimeStamp更好,因爲它是一個公共屬性)。
  2. 您正在設置CreateTimeStamp屬性並在自定義操作中讀取CustomActionData。您應該將CustomActionData屬性設置爲INSTALLLOCATION路徑。
  3. 由於您的自定義操作正在安裝文件夾中創建文件,因此它應該按延遲運行,並且Impersonate屬性應設置爲「no」。這樣它將有足夠的權限來創建文件。

嘗試進行這些修改並查看問題是否仍然存在。

+0

嗨Cosmin Pirvu ,非常感謝你的回答。我坐在impersonate屬性,現在它工作正常!謝謝! – rhe1980 2011-05-02 21:05:25

+0

作爲一個方面的說明:這個答案包含一個很好的要點與示例http://stackoverflow.com/a/27299522/602449 – 2017-02-03 10:28:46

6

我相信你的自定義操作需要在InstallInitialize和InstallFinalize之間。試試這個:

<InstallExecuteSequence> 
    <Custom Action="SetInstallPath" After="InstallInitialize"/> 
    <Custom Action="CreateTimeStamp" Before="InstallFinalize"/> 
</InstallExecuteSequence> 
+0

謝謝你的回答。在我的帖子中,我寫了en錯誤 – rhe1980 2011-05-02 20:12:23

+0

謝謝你的回答。在我的帖子中,我寫了en錯誤。 我威克斯文件看起來是這樣的: <自定義操作= 「SetInstallPath」 之前= 「InstallFinalize」/> <自定義操作= 「CreateTimeStamp」 之前= 「InstallFinalize」/> 我的問題是,它看起來像一切正常。我得到沒有錯誤,並在日誌文件中,我得到了該文件已生成的消息。 但運行後文件不存在於安裝位置.. – rhe1980 2011-05-02 20:19:29

+0

更改這兩個行動執行延期,你也不應該讓他們在同一時間運行。您目前擁有它們都運行Before =「InstallFinalize」。 – 2011-05-02 20:28:32