func init // define project name sys.set_project(this.name) // initialize instance sys.add_var(this.name, 'WindowsService') // initialize properties platform_target = this.props("Platform").value if(linked("onError")) this.setfield('ex', 'ex' + this.id) end sys.set_typed_field(104, 'AutoLog') sys.set_typed_field(104, 'CanHandlePowerEvent') sys.set_typed_field(104, 'CanHandleSessionChangeEvent') sys.set_typed_field(104, 'CanPauseAndContinue') sys.set_typed_field(104, 'CanShutdown') sys.set_typed_field(104, 'CanStop') sys.set_typed_field(1, 'ExitCode') sys.set_typed_field(2, 'ServiceName') // makes implementation methods for properties sys._prop_init('AutoLog', 0, 1, 104) sys._prop_init('CanHandlePowerEvent', 0, 1, 104) sys._prop_init('CanHandleSessionChangeEvent', 0, 1, 104) sys._prop_init('CanPauseAndContinue', 0, 1, 104) sys._prop_init('CanShutdown', 0, 1, 104) sys._prop_init('CanStop', 0, 1, 104) sys._prop_init('ExitCode', 0, 1, 1) sys._prop_init('EventLog', 1, 0, 0) sys._prop_init('ServiceName', 1, 1, 2) // makes implementation of methods as properties sys._mtd_as_prop_init('this') // initialize common events and properties include("Component-init") end func doStart() // add using namespaces sys.add_use('System') sys.add_use('System.ComponentModel') sys.add_use('System.Configuration.Install') sys.add_use('System.ServiceProcess') // add common references sys.reference_add('System') sys.reference_add('System.Core') sys.reference_add('System.Xml.Linq') sys.reference_add('System.Data.DataSetExtensions') sys.reference_add('Microsoft.CSharp') sys.reference_add('System.Data') sys.reference_add('System.ServiceProcess') sys.reference_add('System.Configuration.Install') sys.reference_add('System.Xml') // put startup code here - start threads, get inital data, etc. if(linked("onStart")) blk_start = block.reg("onStart").inc().inc() // store original blocks sys.blocks_store() // create event code event("onStart", 'args') blk_start.println('// OnStart') .println('protected override void OnStart(string[] args) {').inc() if(not blk_lvars.empty()) blk_start.copyhere(blk_lvars) end blk_start.copyhere(blk) .println('base.OnStart(args);') .dec().println('}') .println() // restore original blocks sys.blocks_restore() end // put stop code here - stop threads, set final data, etc. if(linked("onStop")) blk_stop = block.reg("onStop").inc().inc() // store original blocks sys.blocks_store() // create event code event("onStop") blk_stop.println('// OnStop') .println('protected override void OnStop() {').inc() if(not blk_lvars.empty()) blk_stop.copyhere(blk_lvars) end blk_stop.copyhere(blk) .println('base.OnStop();') .dec().println('}') .println() // restore original blocks sys.blocks_restore() end // put pause code here - pause working threads, etc. if(linked("onPause")) blk_pause = block.reg("onPause").inc().inc() // store original blocks sys.blocks_store() // create event code event("onPause") blk_pause.println('// OnPause') .println('protected override void OnPause() {').inc() if(not blk_lvars.empty()) blk_pause.copyhere(blk_lvars) end blk_pause.copyhere(blk) .println('base.OnPause();') .dec().println('}') .println() // restore original blocks sys.blocks_restore() end // put continue code here - un-pause working threads, etc. if(linked("onContinue")) blk_continue= block.reg("onContinue").inc().inc() // store original blocks sys.blocks_store() // create event code event("onContinue") blk_continue.println('// OnContinue') .println('protected override void OnContinue() {').inc() if(not blk_lvars.empty()) blk_continue.copyhere(blk_lvars) end blk_continue.copyhere(blk) .println('base.OnContinue();') .dec().println('}') .println() // restore original blocks sys.blocks_restore() end // called when the system is shutting down if(linked("onShutdown")) blk_shutdown= block.reg("onShutdown").inc().inc() // store original blocks sys.blocks_store() // create event code event("onShutdown") blk_shutdown.println('// OnShutdown') .println('protected override void OnShutdown() {').inc() if(not blk_lvars.empty()) blk_shutdown.copyhere(blk_lvars) end blk_shutdown.copyhere(blk) .println('base.OnShutdown();') .dec().println('}') .println() // restore original blocks sys.blocks_restore() end // recieve the command if(linked("onCustomCommand")) blk_command = block.reg("onCustomCommand").inc().inc() // store original blocks sys.blocks_store() // create event code event("onCustomCommand", 'command') blk_command.println('// OnCustomCommand') .println('protected override void OnCustomCommand(int command) {').inc() if(not blk_lvars.empty()) blk_command.copyhere(blk_lvars) end blk_command.copyhere(blk) .println('base.OnCustomCommand(command);') .dec().println('}') .println() // restore original blocks sys.blocks_restore() end // detecting power status changes if(linked("onPowerEvent")) blk_powerevent = block.reg("onPowerEvent").inc().inc() // store original blocks sys.blocks_store() // create event code event("onPowerEvent", 'powerStatus') blk_powerevent.println('// OnPowerEvent') .println('protected override void OnPowerEvent(PowerBroadcastStatus powerStatus) {').inc() if(not blk_lvars.empty()) blk_powerevent.copyhere(blk_lvars) end blk_powerevent.copyhere(blk) .println('base.OnPowerEvent(powerStatus);') .dec().println('}') .println() // restore original blocks sys.blocks_restore() end // to handle a change user session if(linked("onSessionChange")) blk_sessionchange = block.reg("onSessionChange").inc().inc() // store original blocks sys.blocks_store() // create event code event("onSessionChange", 'changeDescription') blk_sessionchange.println('// OnSessionChange') .println('protected override void OnSessionChange(SessionChangeDescription changeDescription) {').inc() if(not blk_lvars.empty()) blk_sessionchange.copyhere(blk_lvars) end blk_sessionchange.copyhere(blk) .println('base.OnSessionChange(changeDescription);') .dec().println('}') .println() // restore original blocks sys.blocks_restore() end // init all unlinked elements ---------------------------------- this.parent.initall() // create main unit --------------------------------------------- blk = block.reggen() blk.copyhere(blk_using) .println() .println('namespace my', code(replace(project_name(), "-" , "_"))) .println('{').inc() if(not blk_struct.empty()) blk.copyhere(blk_struct) .println() end blk.println('class WindowsService : ServiceBase {').inc() if(not blk_fields.empty()) blk.copyhere(blk_fields) .println() end blk.copyhere(blk_vars) .println() .println('// public constructor for service') .println('public WindowsService() {').inc() .println(this.codename, ' = this;') .copyhere(blk_init) .dec().println('}') .println() .println('// this is where service is run') .println('static void Main() {').inc() linked("onError") ? blk.println('try {').inc() : '' blk.println('ServiceBase.Run(new WindowsService());') if(linked("onError")) blk.dec().println('} catch (Exception ', this.ex, ') {').inc() event("onError", this.ex + '.Message') blk.dec().println('}') end blk.dec().println('}') .println() .copyhere(blk_start) .copyhere(blk_stop) .copyhere(blk_pause) .copyhere(blk_continue) .copyhere(blk_shutdown) .copyhere(blk_command) .copyhere(blk_powerevent) .copyhere(blk_sessionchange) if(not blk_proc_imp.empty()) blk.println('// other implements') .copyhere(blk_proc_imp) .println() end for(i=0; i') .println('').inc() .println('').inc() .println('', this.props("Platform").value, '') .println('Exe') .println('', namespace, '') .println('', pname, '') .println('v4.0') .println('', this.props("FileAligment").value, '') b = this.props("Constants").value arr = new array() if(b _and_ 1) arr.add('DEBUG') end if(b _and_ 2) arr.add('TRACE') end if(not isdef("Symbols")) blk.println('true') arr.add(code(this.props("Symbols").value)) end blk.println('', lower(this.props("DebugInfo").value), '') .println('', lower(this.props("Optimize").value), '') if(isdef("OuputPath")) blk.println('', code(project_dir()), '') else blk.println('', code(this.props("OutputPath").value), '') end blk.println('', arr.join(';'), '') if(not isdef("ErrorReport")) blk.println('', lower(this.props("ErrorReport").value), '') end blk.println('', this.props("WarningLevel").value, '') .println('', lower(this.props("Unsafe").value), '') if(not isdef("SuppressWarning")) blk.println('', code(this.props("SuppressWarning").value), '') end if(not isdef("TreatWarnings")) blk.println('true') end if(not isdef("WarningsAsErrors")) blk.println('', code(this.props("WarningsAsErrors").value), '') end blk.println('', lower(this.props("Serialization").value), '') if(not isdef("Language")) blk.println('', code(this.props("Language").value), '') end if(not isdef("CheckOverflow")) blk.println('true') end if(not isdef("NoStdLib")) blk.println('true') end blk.copyhere(blk_prop) .println('true') .dec().println('') .println('').inc() .copyhere(blk_refs) .dec().println('') .println('').inc() .println('').inc() .println('Component') .dec().println('') .copyhere(blk_comp) .dec().println('') .copyhere(blk_resx) .println('').inc() .println('') .dec().println('') .println('') .dec().println('') end func doRequestAdditionalTime(data) blk.println('this.RequestAdditionalTime(', d("Milliseconds"), ');') end func ExecutablePath return('System.Reflection.Assembly.GetEntryAssembly().Location') end