/// <summary> /// Initializes a new instance of the <see cref="PathFileAction"/> class with properties/fields initialized with specified parameters. /// </summary> /// <param name="id">The explicit <see cref="Id"></see> to be associated with <see cref="PathFileAction"/> instance.</param> /// <param name="appPath">Path to the file to be executed on the target system.</param> /// <param name="args">The arguments to be passed to the file during the execution.</param> /// <param name="workingDir">Working directory for the file execution.</param> /// <param name="returnType">The return type of the action.</param> /// <param name="when"><see cref="T:WixSharp.When"/> the action should be executed with respect to the <paramref name="step"/> parameter.</param> /// <param name="step"><see cref="T:WixSharp.Step"/> the action should be executed before/after during the installation.</param> /// <param name="condition">The launch condition for the <see cref="PathFileAction"/>.</param> /// <param name="sequence">The MSI sequence the action belongs to.</param> public PathFileAction(Id id, string appPath, string args, string workingDir, Return returnType, When when, Step step, Condition condition, Sequence sequence) : base(id, returnType, when, step, condition, sequence) { AppPath = appPath; Args = args; WorkingDir = workingDir; Name = "Action" + (++count) + "_" + IO.Path.GetFileName(appPath); }
/// <summary> /// Executes a new instance of the <see cref="QtCmdLineAction"/> class with properties/fields initialized with specified parameters. /// </summary> /// <param name="id">The explicit <see cref="Id"></see> to be associated with <see cref="QtCmdLineAction"/> instance.</param> /// <param name="appPath">Path to the application to be executed. This can be a file name only if the location of the application is well-known.</param> /// <param name="args">The arguments to be passed to the application during the execution.</param> /// <param name="returnType">The return type of the action.</param> /// <param name="when"><see cref="T:WixSharp.When"/> the action should be executed with respect to the <paramref name="step"/> parameter.</param> /// <param name="step"><see cref="T:WixSharp.Step"/> the action should be executed before/after during the installation.</param> /// <param name="condition">The launch condition for the <see cref="QtCmdLineAction"/>.</param> /// <param name="sequence">The MSI sequence the action belongs to.</param> public QtCmdLineAction(Id id, string appPath, string args, Return returnType, When when, Step step, Condition condition, Sequence sequence) : base(id, returnType, when, step, condition, sequence) { AppPath = appPath; Args = args; Name = "Action" + (++count) + "_QtCmdLine_" + IO.Path.GetFileName(appPath); }
void Bind <T>(Expression <Func <T> > expression, When when = When.Before, Step step = null, bool elevated = false) { var name = Reflect.NameOf(expression); var handler = expression.Compile()() as Delegate; const string wixSharpProperties = "WIXSHARP_RUNTIME_DATA"; if (handler != null) { if (this.AbortSetupOnUnhandledExceptions.HasValue) { var abortOnErrorName = "WIXSHARP_ABORT_ON_ERROR"; if (!Properties.Any(p => p.Name == abortOnErrorName)) { this.AddProperty(new Property(abortOnErrorName, this.AbortSetupOnUnhandledExceptions.Value.ToString())); } } //foreach (string handlerAsm in handler.GetInvocationList().Select(x => x.Method.DeclaringType.Assembly.Location)) foreach (var type in handler.GetInvocationList().Select(x => x.Method.DeclaringType)) { string location = type.Assembly.Location; //Resolving scriptAsmLocation is not properly tested yet bool resolveInMemAsms = true; if (resolveInMemAsms) { if (location.IsEmpty()) { location = type.Assembly.GetLocation(); } } if (location.IsEmpty()) { throw new ApplicationException($"The location of the assembly for ManagedProject event handler ({type}) cannot be obtained.\n" + "The assembly must be a file based one but it looks like it was loaded from memory.\n" + "If you are using CS-Script to build MSI ensure it has 'InMemoryAssembly' set to false."); } if (!this.DefaultRefAssemblies.Contains(location)) { this.DefaultRefAssemblies.Add(location); } } this.AddProperty(new Property("WixSharp_{0}_Handlers".FormatWith(name), GetHandlersInfo(handler as MulticastDelegate))); string dllEntry = "WixSharp_{0}_Action".FormatWith(name); if (step != null) { if (elevated) { this.AddAction(new ElevatedManagedAction(dllEntry) { Id = new Id(dllEntry), ActionAssembly = thisAsm, Return = Return.check, When = when, Step = step, Condition = Condition.Create("1"), UsesProperties = "WixSharp_{0}_Handlers,{1},{2}".FormatWith(name, wixSharpProperties, DefaultDeferredProperties), }); } else { this.AddAction(new ManagedAction(dllEntry) { Id = new Id(dllEntry), ActionAssembly = thisAsm, Return = Return.check, When = when, Step = step, Condition = Condition.Create("1") }); } } } }