我有一个 C# WiX 项目,像这样(修剪过的代码):
C# WiX 项目主要:
public class WixInstaller
{
public static void Main()
{
// Setup Project
var project = new Project(AppName,
// Application Dir
new Dir(@$"%ProgramFiles%\{AppName}",
// Application Files
new Files($@"{binPath}\*.*"),
// Program Menu Exe
new File($@"{binPath}\{AppName}.exe",
new FileShortcut(AppName, @$"%ProgramMenu%\{AppName}") { IconFile = iconPath }))
);
// Run After Install
var runAfterInstallAction = new ElevatedManagedAction(
CustomActions.RunAfterInstall, Return.check, When.After, Step.InstallFinalize, Condition.NOT_Installed)
{
Execute = Execute.immediate
};
project.AddAction(runAfterInstallAction);
Compiler.BuildMsi(project, System.IO.Path.Combine(_solutionDirectory, fileName));
}
}
自定义动作:
public class CustomActions
{
[CustomAction]
public static ActionResult RunAfterInstall(Session session)
{
try
{
// This pattern in necessary to catch exceptions relating to missing dlls.
Action(session);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
return ActionResult.Success;
static void Action(Session session)
{
using Microsoft.Win32.TaskScheduler.TaskService ts = new();
}
}
}
执行自定义操作时,会出现错误
Could not load file or assembly Microsoft.Win32.TaskScheduler version....
。我不知道如何解决这个问题。网上有很多指南,但似乎没有关于 WiX C# 项目的内容,甚至在 WiX 的实际文档中也是如此。好像我需要添加一个由操作引用的dll文件,但C#项目似乎没有类似的功能。
actionAssembly
设置为所需的二进制文件,但没有成功(找不到它,似乎没有创建 CA 文件)以下工作有效,添加到主要内容中:
project.DefaultRefAssemblies.Add(@".\Microsoft.Win32.TaskScheduler.dll");