我有一种非常奇怪的情况,即自定义操作代码不会同步运行 因为你在日志中可以看到" WinRoot目录"日志行应出现在" CommonFiles Dir"线。然而它最终出现了。
这是代码:
[CustomAction]
public static ActionResult CCCA_LogProductName(Session session)
{
productName = session[InstallShieldConstants.productName];
CustomActionData customActionData = new CustomActionData();
// log properties
CCULog.LogMessageToFile(session, "CCCA_LogProductName", "INSTALLDIR : " +
session[InstallShieldConstants.installDir]);
CCULog.LogMessageToFile(session, "CCCA_LogProductName", "Product Version : " +
session[InstallShieldConstants.productVersion]);
CCULog.LogMessageToFile(session, "CCCA_LogProductName", "Source Dir : " +
session[InstallShieldConstants.sourceDir]);
CCULog.LogMessageToFile(session, "CCCA_LogProductName", "Support Dir : " +
session[InstallShieldConstants.supportDir]);
CCULog.LogMessageToFile(session, "CCCA_LogProductName", "CommonFiles Dir : " +
Environment.GetEnvironmentVariable("CommonProgramFiles"));
CCULog.LogMessageToFile(session, "CCCA_LogProductName", "WinRoot Dir : " +
session[InstallShieldConstants.windowsVolumeDir]);
customActionData.Add(InstallShieldConstants.productName, productName);
session["CCCA_LogProductNameOnFirstTimeInstallStart"] = customActionData.ToString();
session["CCCA_LogProductNameOnUninstallStart"] = customActionData.ToString();
session["CCCA_LogProductNameOnUninstallEnd"] = customActionData.ToString();
session["CCCA_LogProductNameOnInstallStart"] = customActionData.ToString();
session["CCCA_LogProductNameOnInstallEnd"] = customActionData.ToString();
return ActionResult.Success;
}
虽然日志表明以下内容:
调用自定义操作 CosmoPublisherCustomActions!CosmoPublisherCustomActions.CCUCustomActions.CCCA_LogProductName 07/23/2015 11:24:44 :: CosmoPublisher :: CCCA_LogProductName :: INSTALLDIR:C:\ Program Files(x86)\ CosmoCom \ Server Components \ 07/23/2015 11:24:44 :: CosmoPublisher :: CCCA_LogProductName :: Product 版本:7.2.0.119 07/23/2015 11:24:44 :: CosmoPublisher :: CCCA_LogProductName :: Source目录:C:\ Program Files (x86)\ CosmoCom \ Server Components \ CosmoPublisherHotfixes \ HF72-40106 \ 07/23/2015 11:24:44 :: CosmoPublisher :: CCCA_LogProductName ::支持 迪尔: C:\ Users \用户SVCCOS〜1 \应用程序数据\本地\温度{D3407C75-8846-4DB4-8736-149A884053EF} 07/23/2015 11:24:44 :: CosmoPublisher :: CCCA_LogProductName :: CommonFiles目录:C:\ Program Files(x86)\ Common Files MSI(s)(C4!70) [11:24:44:641]:物业变化:添加 CCCA_LogProductNameOnFirstTimeInstallStart属性。它的价值在于 ' ProductName = Media Services .NET'。 MSI(s)(C4!70)[11:24:44:642]: PROPERTY CHANGE:添加CCCA_LogProductNameOnUninstallStart属性。 它的价值是' ProductName = Media Services .NET'。 MSI(s)(C4!70) [11:24:44:642]:物业变化:添加 CCCA_LogProductNameOnUninstallEnd属性。它的价值在于 ' ProductName = Media Services .NET'。 MSI(s)(C4!70)[11:24:44:642]: PROPERTY CHANGE:添加CCCA_LogProductNameOnInstallStart属性。 它的价值是' ProductName = Media Services .NET'。 MSI(s)(C4!70) [11:24:44:642]:物业变化:添加 CCCA_LogProductNameOnInstallEnd属性。它的价值在于 ' ProductName = Media Services .NET'。 07/23/2015 11:24:44 :: CosmoPublisher :: CCCA_LogProductName :: WinRoot目录:C:\ CustomAction CCCA_LogProductName返回实际的错误代码1603(注意这可能不是 如果翻译发生在沙箱内,则100%准确)行动结束 11:24:44:CCCA_LogProductName。返回值3.行动结束11:24:44: 安装。返回值3。
我的Installshield自定义操作设置为' Synchronous'所以我无法理解为什么会这样。奇怪的是,只记录到文件的自定义操作失败了 谢谢
修改
我的日志功能写入会话日志和本地文件:
/// <summary>
/// Writing message to log file
/// </summary>
/// <param name="tag">tag of the log message.</param>
/// <param name="message">message to write to log.</param>
public static void LogMessageToFile(Session session, string tag, string message)
{
StreamWriter sw = File.AppendText(
GetTempPath() + logFileName);
try
{
string logLine = string.Format(
"{0:G} :: {1} :: {2}", DateTime.Now, tag, message);
sw.WriteLine(logLine);
session.Log("{0:G} :: {1}:: {2} :: {3}", DateTime.Now, logTag, tag, message);
}
finally
{
sw.Close();
}
}
答案 0 :(得分:0)
我很好奇为什么我们没有看到DTF的堆栈跟踪。 DTF允许您附加调试器,我确信命令以正确的顺序运行。我从来没有见过MSI登录失序,但它是可能的。你可以尝试/ l * v! (强调!)看看它是否会影响它的表现。
最简单的CA可能会失败。这就是为什么成为他们的主人或者根本不做他们的重要性。