You are here

I need heelp

6 posts / 0 new
Last post
Halphinian
Halphinian's picture
Offline
Last seen: 8 years 8 months ago
Joined: 2015-07-22 12:03
I need heelp

I am a n00b that needs help making apps portable and putting them in the Portableapps Platform. So far, I have (somehow) managed to successfully use the Portableapps.com Launcher and have tried to make it to the Portableapps.com Installer. I made an installer, and was very happy with myself, so I successfully installed it to the Platform. In my moment of pride, I tried to run the application and it gave me the following message:

F:\PortableApps\OverturePortable\App\Appinfo\Launcher\OverturePortable.ini is missing [Launch]:ProgramExecutable - What am I to launch?

Here is the OverturePortable.ini code:

;[MainLauncherWindow]
;@ = $DlgAttrBase sz(790,556) mg(0) alias(taskview) at(minimizable,customfooter) bg("MainWindowBg") onclose(if(env("WithoutSysShell"), if($IsKAT ? (if(isUserClose && uninstallAVPTool(msg("UninstallAVPToolWarning", #m_yesno|#m_warning)), url($url_trials)), true) : msg("ProductExitConfirm", #m_yesno), exit(), false))) h(16980)
;Header = [MainLauncherWindow.Header] subst(Title(text()) Administration(text()) )
;Body = [MainLauncherWindow.Body] a(la) sz(p,p) xy(,,,45)
;Footer = [MainWindow_Footer] sz(p,45) mg(20,,20) a(lb)
;AnimatedPage = t(animation) a(lt) sz(p,p)

[LauncherWindowPanel]
@ = a(lb) sz(p,$DialogPanelSizeY) rs(100,0) ext(1)
Background = sz(a,a) bg("DlgFooter") a(rt) extprm(1)
ResizeBackground = sz(p,p) rs(100,0) bg("DlgFooter_rs") a(pt) extprm(1)
Sep = $StdFooterSeparator a(lt) extprm(1)
Footer = [LauncherWindowFooter] sz(p,p)

[LauncherWindowFooter]
@ = a(lb) sz(p,40) rs(100,0) ext(1)
Cancel = [BtnGlass] a(rb) xy($Button_Shift,7) onclick(close()) extprm(1) text($Close)
Help = $FooterLink a(lc) xy(15,) onclick(help()) text($Help) extprm(1) enable($IsAdvancedDisinfectionStoped)

[LauncherWindowGreenFooter]
@ = a(lb) sz(p,40) rs(100,0) ext(1)
Bckgnd = sz(a,a) bg("DlgFooter") a(rt) extprm(1)
ResizeBackground = sz(p,p) rs(100,0) bg("DlgFooter_rs") a(pt) extprm(1)
Sep = $StdFooterSeparator a(lt) extprm(1)
FooterBody = [LauncherWindowFooter]

[MainLauncherWindow.Header]
@ = sz(p,57) ext(1)
Title = xy(18,9) sz(a,a) a(lt) bg("titlekts") at(clickable) onclick(window("ProductInfo")) extprm(1)
Settings = $HeaderLink subst(Icon(i("MainSettings"))) a(rt) xy(20,19,$Button_Shift) text($SettingsS) onclick(window("OptionsWindow"))
Administration = $HeaderLink subst(Icon(i("LauncherIcons16,2"))) a(pt) xy($Button_Shift,23) onclick(f_OpenWindowChecked("RemoteControlWindowPage",#pwdc_OpenConsole)) extprm(1) use(f_ManagementConsoleInstalled())
AlphaWarning = sz(a,a) a(ct) xy(,3) f("Header1White") use(!$IsRelease) text($AlphaWarning)

[MainLauncherWindow.Body]
Tools = [MainLauncherWindow.Tools] a(lb) sz(p,a) xy(11,,11)
Kis = [MainLauncherWindow.InternetSecurity] a(lt) xy(11)
Backup = [MainLauncherWindow.BackupBox] a(at) xy(6) use(f_isInstalled("BackupStorageMgr"))
BackupDisabled = [MainLauncherWindow.BackupBoxDisabled] a(at) xy(6) use(!ctl.Backup.visible)
Parctl = [MainLauncherWindow.Parctl] a(at) xy(6) use(f_isInstalled("PCtrlEx"))
ParctlDisabled = [MainLauncherWindow.ParctlDisabled] a(at) xy(6) use(!ctl.Parctl.visible)

[MainLauncherWindow.Box]
@ = sz(252,a) ext(1) at(clickable)
Header = a(lt) [MainLauncherWindow.Box.Header] extprm(1)
Body = a(la) sz(p,152) mg(9,10,9,10) bg(ctl.parent.hotlight ? "LauncherBodySel" : "LauncherBody") extprm(1)
Footer = [MainLauncherWindow.Box.Footer] extprm(1)

[MainLauncherWindow.DisabledBox]
@ = sz(252,a) ext(1)
Body = a(la) sz(p,152) xy(,29) mg(10,10,10,10) extprm(1)
Left = a(lt) sz(a,a) bg("LauncherDisabledLeft")
Middle = a(lt) sz(p,a) xy(5,,5) bg("LauncherDisabledMiddle")
Right = a(rt) sz(a,a) bg("LauncherDisabledRight")

[MainLauncherWindow.Box.Footer]
@ = a(la) sz(p,a) at(clickable) onclick(if(ctl.Menu.focused, ctl.focus(), ctl.Menu.focus())) ext(1)
Left = a(la) sz(a,a) bg("LauncherFooterLeft" + if(ctl.Menu.visible, "_Open"))
Middle = a(ls) sz(p,a) xy(4,,17) bg("LauncherFooterMiddle" + if(ctl.Menu.visible, "_Open"))
Right = a(rs) sz(a,a) bg("LauncherFooterRight" + if(ctl.Menu.visible, "_Open"))
Menu = [MainLauncherWindow.Box.Menu] a(la) extprm(1)
Label = a(lt) xy(10,5) f("Normal9") extprm(1)

[MainLauncherWindow.Box.Menu]
@ = sz(p,a) at(clickable) bp(ctl.visible = ctl.focused) ext(1)
Bg = a(lt) sz(p,p) xy(,,,11) bg("LauncherFooterMenuBody")
Body = a(lt) xy(,7) sz(p,a) mg(2,0,2) extprm(1)
Left = a(la) sz(a,a) bg("LauncherFooterMenuLeft")
Middle = a(ls) sz(p,a) xy(4,,4) bg("LauncherFooterMenuMiddle")
Right = a(rs) sz(a,a) bg("LauncherFooterMenuRight")

[MainLauncherWindow.Box.Menu.Link]
@ = a(la) sz(p,a) mg(8,5,8,5) bg(ctl.hotlight ? "LauncherFooterMenuSel" : "") at(clickable) ext(1)
Icon = a(lt) extprm(1)
Link = a(at) f("Normal9") extprm(1)

[MainLauncherWindow.Box.Header]
@ = a(lt) sz(p,a) ext(1)
Dummy = a(lt) sz(p,29)
BgRed = a(lt) [MainLauncherWindow.Box.Header.BgRed] use(0) extprm(1)
BgGreen = a(lt) [MainLauncherWindow.Box.Header.BgGreen] use(1) extprm(1)
BgYellow = a(lt) [MainLauncherWindow.Box.Header.BgYellow] use(0) extprm(1)
Title = a(lc) sz(p,a) at(singleline) xy(10) f("Description") extprm(1)

[MainLauncherWindow.Box.Header.BgRed]
@ = sz(p,29) ext(1)
Left = a(lt) sz(5,a) bg(ctl.parent.parent.parent.hotlight ? "LauncherHeaderRedLeftSel" : "LauncherHeaderRedLeft") extprm(1)
Middle = a(lt) sz(p,a) xy(5,,5) bg(ctl.parent.parent.parent.hotlight ? "LauncherHeaderRedMiddleSel" : "LauncherHeaderRedMiddle") extprm(1)
Right = a(rt) sz(5,a) bg(ctl.parent.parent.parent.hotlight ? "LauncherHeaderRedRightSel" : "LauncherHeaderRedRight") extprm(1)

[MainLauncherWindow.Box.Header.BgGreen]
@ = sz(p,29) ext(1)
Left = a(lt) sz(5,a) bg(ctl.parent.parent.parent.hotlight ? "LauncherHeaderGreenLeftSel" : "LauncherHeaderGreenLeft") extprm(1)
Middle = a(lt) sz(p,a) xy(5,,5) bg(ctl.parent.parent.parent.hotlight ? "LauncherHeaderGreenMiddleSel" : "LauncherHeaderGreenMiddle") extprm(1)
Right = a(rt) sz(5,a) bg(ctl.parent.parent.parent.hotlight ? "LauncherHeaderGreenRightSel" : "LauncherHeaderGreenRight") extprm(1)

[MainLauncherWindow.Box.Header.BgYellow]
@ = sz(p,29) ext(1)
Left = a(lt) sz(5,a) bg(ctl.parent.parent.parent.hotlight ? "LauncherHeaderYellowLeftSel" : "LauncherHeaderYellowLeft") extprm(1)
Middle = a(lt) sz(p,a) xy(5,,5) bg(ctl.parent.parent.parent.hotlight ? "LauncherHeaderYellowMiddleSel" : "LauncherHeaderYellowMiddle") extprm(1)
Right = a(rt) sz(5,a) bg(ctl.parent.parent.parent.hotlight ? "LauncherHeaderYellowRightSel" : "LauncherHeaderYellowRight") extprm(1)

[MainLauncherWindow.InternetSecurity]
@ = [MainLauncherWindow.Box] alias(productstatus) subst(Footer(subst(Label() Menu(subst(Body([MainLauncherWindow.Box.Menu.InternetSecurity]))))) Body([MainLauncherWindow.InternetSecurity.Body]) Header(subst(BgRed(use(1) visible(s_ProdStateSeverity(ProdStateId)==#eProtStateCrit)) BgYellow(use(1) visible(s_ProdStateSeverity(ProdStateId)==#eProtStateWarn)) BgGreen(visible(s_ProdStateSeverity(ProdStateId)==#eProtStateNormal)) Title(text(s_ProtectionBannerText(s_ProdStateSeverity(ProdStateId))))))) onclick(ctl.AnimatedPage.createItems("MainWindowPage",ctl,300)) prm(s_ProductStateList)

[MainLauncherWindow.Box.Menu.InternetSecurity]
$OpenScanProgressWindow = window("ScanProgressWindow", p_itemID(name), $ModalIfRemote)
Protection = [MainLauncherWindow.Box.Menu.Link] subst(Icon(xy(2) i(s_IsStateRunning(Protection.state) ? "ParCtlOptionsIcon,4" : "ParCtlOptionsIcon,6")) Link()) onclick(f_setState(s_IsStateRunning(Protection.state) ? #TASK_REQUEST_PAUSE : #TASK_REQUEST_RUN, "Protection"); ctl.parent.focus()) use(!$IsProtectionNotInstalled)
Full = [MainLauncherWindow.Box.Menu.Link] subst(Icon(i("LauncherIcons16,1")) Link()) alias(taskview) ns(Scan_My_Computer) onclick(f_setState(#TASK_REQUEST_RUN, name); $OpenScanProgressWindow)
Update = [MainLauncherWindow.Box.Menu.Link] subst(Icon(i("ParCtlExAll16,0")) Link()) alias(taskview) ns(Updater) onclick(f_setState(#TASK_REQUEST_RUN, name); $OpenUpdaterProgressWindow)

[MainLauncherWindow.InternetSecurity.Body]
@ = a(la)
Icon = sz(a,a) a(lt) i("TaskKAV")
Descr = a(as) f("Header5Med")
Security = a(lt) xy(,75) f("Description") text(s_ProtectionBannerText(s_ProdStateSeverity(ProdStateId)) + ": " + s_ProdState_Threats(ProdStateId))
Bases = a(la) xy(,5) f("Header0")
Status = a(as) f("Description") text(f_BasesStatus(product.UpdateState))

[MainLauncherWindow.Box.Menu.Backup]
;Backup = [MainLauncherWindow.Box.Menu.Link] subst(Icon(i("BackupIcons,1")) Link()) onclick(f_OpenWindowChecked("BackupMainWindowPage:Backup",#pwdc_OpenBackup))
Backup = [MainLauncherWindow.Box.Menu.Link] subst(Icon(i("BackupIcons,1")) Link()) onclick(f_OpenWindowChecked("BackupMainWindowPage",#pwdc_OpenBackup))
;Restore = [MainLauncherWindow.Box.Menu.Link] subst(Icon(i("BackupIcons,0")) Link()) onclick(f_OpenWindowChecked("BackupMainWindowPage:Restore",#pwdc_OpenBackup))
Restore = [MainLauncherWindow.Box.Menu.Link] subst(Icon(i("BackupIcons,0")) Link()) onclick(f_OpenWindowChecked("BackupMainWindowPage",#pwdc_OpenBackup))
Report = [MainLauncherWindow.Box.Menu.Link] subst(Icon(i("report16")) Link()) onclick(window("BackupStatistics"))

[MainLauncherWindow.BackupBox]
@ = [MainLauncherWindow.Box] alias(last_backup_task) subst(Footer(subst(Label() Menu(subst(Body([MainLauncherWindow.Box.Menu.Backup]))))) Body([MainLauncherWindow.Backup.Body]) Header(subst(BgRed(use(1) visible(UpdateState & #eBackupTaskFailed)) BgYellow(use(1) visible(UpdateState & (#eBackupTaskNotFinished|#eBackupNoTasks)) ) BgGreen(use(1) visible(f_BackupStateOk())) Title()))) onclick(ctl.AnimatedPage.createItems("BackupMainWindowPage",ctl,300,0))

[MainLauncherWindow.BackupBoxDisabled]
@ = [MainLauncherWindow.DisabledBox] subst(Body([MainLauncherWindow.Backup.Body] subst(DateText(use(0)) Date(use(0)) StatusText(use(0)) Status(use(0)) Error(use(0)))))

[MainLauncherWindow.Backup.Body]
@ = a(la) ext(1)
Icon = sz(a,a) a(lt) i("backup48")
Descr = a(as) xy(,,,15) f("Header5Med")
dummy = a(lt) xy(,70) sz(0,0)
DateText = a(la) xy(,5) f("Description") visible(state) extprm(1)
Date = a(la) f("Description") sz(p,a) text(capitalize(s_ProfileStateRes(state,false))) ontimer(10000,ctl.updatedata()) visible(state) extprm(1)
StatusText = a(la) xy(,5) f("Header0") extprm(1)
Error = a(as) f("Description") sz(p,a) visible(lastErr) extprm(1)
NoTasks = a(as) f("Description") sz(p,a) visible(!lastErr && !state)
Status = a(as) f("Description") sz(p,a) visible(!lastErr && state) text(capitalize(s_ProfileState(state,false,true))) extprm(1)

[MainLauncherWindow.Box.Menu.Parctl]
Suspend = [MainLauncherWindow.Box.Menu.Link] subst(Icon(xy(2) i(state == #StateRunning ? "ParCtlOptionsIcon,4" : "ParCtlOptionsIcon,6")) Link()) onclick(if(state == #StateRunning,if(checkPassword(#pwdc_OpenParctl),setstate(#TASK_REQUEST_PAUSE,name)),setstate(#TASK_REQUEST_RUN,name)); ctl.parent.focus())
;Reports = [MainLauncherWindow.Box.Menu.Link] subst(Icon(i("ParCtlStat16")) Link()) onclick(f_OpenWindowChecked("ParCtlMainWindowPage:Stat",#pwdc_OpenParctl))
Reports = [MainLauncherWindow.Box.Menu.Link] subst(Icon(i("ParCtlStat16")) Link()) onclick(f_OpenWindowChecked("ParCtlMainWindowPage",#pwdc_OpenParctl))
;Settings = [MainLauncherWindow.Box.Menu.Link] subst(Icon(xy(2) i("ParCtlOptionsIcon,0")) Link()) onclick(f_OpenWindowChecked("ParCtlMainWindowPage:Users",#pwdc_OpenParctl))
Settings = [MainLauncherWindow.Box.Menu.Link] subst(Icon(xy(2) i("ParCtlOptionsIcon,0")) Link()) onclick(f_OpenWindowChecked("ParCtlMainWindowPage",#pwdc_OpenParctl))

[MainLauncherWindow.Parctl]
@ = [MainLauncherWindow.Box] subst(Footer(subst(Label() Menu(subst(Body([MainLauncherWindow.Box.Menu.Parctl]))))) Body([MainLauncherWindow.Parctl.Body]) Header(subst(Title() BgRed(use(1) visible(state != #StateRunning)) BgGreen(visible(state == #StateRunning))))) alias(taskview) ns(PCtrlEx) onclick(ctl.AnimatedPage.createItems("ParCtlMainWindowPage",ctl,300))

[MainLauncherWindow.ParctlDisabled]
@ = [MainLauncherWindow.DisabledBox] subst(Body([MainLauncherWindow.Parctl.Body]))

[MainLauncherWindow.Parctl.Body]
@ = a(la) ontimer(1000,l_AccountControlSettings=findSettingsUserAccount(ser(users),CurrentUserSID).settings)
Icon = sz(a,a) a(lt) i("parctl48")
Descr = a(as) f("Header5Med")
dummy = a(lt) xy(,70) sz(0,0)
UsersText = a(la) xy(,5) f("Description") visible(!f_IsStateActive(state) || !l_AccountControlSettings.Enabled)
Users = a(as) f("Description") sz(p,a) visible(!f_IsStateActive(state) || !l_AccountControlSettings.Enabled) text(f_IsStateActive(state) ? controlledUsersCount(ser(users)) : 0)
Status = [MainLauncherWindow.Parctl.Body.Status] xy(,5) visible(f_IsStateActive(state) && l_AccountControlSettings.Enabled)

[MainLauncherWindow.Parctl.Body.Status]
@ = a(la) sz(p,a)
StatusText = a(la) f("Header0")
Dummy = a(as) sz(0,0) xy(,-14)
Internet = a(ss) visible(l_AccountControlSettings.InternetControl.Enabled || l_AccountControlSettings.FileDownloadControl.Enabled || l_AccountControlSettings.WebControl.Enabled || l_AccountControlSettings.SafeSearch.Enabled) f("Description") sz(a,a) xy(,14)
IM = a(ss) visible(l_AccountControlSettings.IMControl.Enabled || l_AccountControlSettings.Keywords.Enabled || l_AccountControlSettings.PersonalInfo.Enabled) f("Description") sz(a,a) xy(,14)
Computer = a(ss) visible(l_AccountControlSettings.ComputerControl.Enabled || l_AccountControlSettings.AppControl.Enabled) f("Description") sz(a,a) xy(,14)
Empty = a(ss) visible(!ctl.Internet.visible && !ctl.IM.visible && !ctl.Computer.visible) sz(a,a) f("Description") xy(,14)

[MainLauncherWindow.Tools]
Top = [MainLauncherWindow.Tools_Top] a(lt) sz(p,a)
Bottom = [MainLauncherWindow.Tools_Bottom] a(la) sz(p,a)

[MainLauncherWindow.Tools_Top]
Bg_MT = a(lt) sz(p,a) bg("LauncherHeaderGreenMiddle") xy(5,,5)
Bg_LT = a(lt) sz(a,a) bg("LauncherHeaderGreenLeft")
Bg_RT = a(rt) sz(a,a) bg("LauncherHeaderGreenRight")
Title = a(lc) f("Header3") xy(20,-1)

[MainLauncherWindow.Tools_Bottom]
Bg_MT = a(lt) sz(p,a) bg("LauncherToolsMB") xy(5,,5)
Bg_LT = a(lt) sz(a,a) bg("LauncherToolsLB")
Bg_RT = a(rt) sz(a,a) bg("LauncherToolsRB")
Body = [MainLauncherWindow.Tools.Body]

[MainLauncherWindow.Tools.Body]
@ = sz(p,p) mg(20,20)
Tuneup = a(as) xy(,,10) [MainLauncherWindow.Task] subst(Name(text()) Descr(text()) Icon(i("pctuneup48"))) onclick(ctl.AnimatedPage.createItems("TuneUpWindowPage",ctl,300))) use(f_TuneUpInstalled())
Encryption = a(as) [MainLauncherWindow.Task] subst(Name(text()) Descr(text()) Icon(i("encryption48"))) onclick(ctl.AnimatedPage.createItems("EncryptionWindowPage",ctl,300)) use(f_EncryptionInstalled())
Offset2 = a(la) xy(,20) use(ctl.Encryption.visible || ctl.Tuneup.visible)
Keyboard = a(as) xy(,,10) [MainLauncherWindow.Task] subst(Name(text()) Descr(text()) Icon(i("vkbd48"))) onclick(window("VirtualKeyboard")) use(f_isVkbdInstalled())
Password = a(as) [MainLauncherWindow.Task] subst(Name(text()) Descr(text()) Icon(i("passwordmgr48")) State([MainLauncherWindow.Tool.Password.State])) onclick(openStickyPassword()) use(f_PassMgrInstalled())

[MainLauncherWindow.Tool.Password.State]
@ = xy(12,2) ontimer(1000, ctl.updatedata())
NotStarted = a(lt) f("KtsDescriptionDGrey") visible(spStatus() == #PassMgrDown)
Locked = a(lt) f("KtsDescriptionRed") visible(spStatus() == #PassMgrLocked)
Unlocked = a(lt) f("KtsDescriptionGreen") visible(spStatus() == #PassMgrUnlocked)

[MainLauncherWindow.Task]
@ = sz(360,a) at(clickable) mg(10,7,10,10) bg1(ctl.selected ? "HilightBtn_sel" : (ctl.hotlight ? "HilightBtn" : "")) ext(1)
Icon = a(lt) extprm(1)
Name = a(lt) xy(53) f("Header2") sz(a,a) extprm(1)
State = a(as) extprm(1)
Descr = a(la) xy(53,8) f("Description") sz(p,a) extprm(1)

Pardon Again, I am a n00b with Portableapps Development and even worse at programming, so if anyone can solve this problem, please edit the code above to include this apparently missing line of code so it can work properly. Pardon Hopefully, once this problem is solved, my app will work and I can use this launcher.ini for more apps in the future. If you know the answer to this problem, please hurry in getting the solution to me Smile
P.S. If you have any advice on making apps portable, feel free to share it with me as it would be extremely useful to me Smile

John T. Haller
John T. Haller's picture
Online
Last seen: 3 min 41 sec ago
AdminDeveloperModeratorTranslator
Joined: 2005-11-28 22:21
Wrong INI

That information you attached is completely unrelated to a PA.c Launcher INI. By unrelated, I mean none of what you posted has anything to do with the PA.c Launcher, not a single section is used by it. Details on the actual INI format are here: https://portableapps.com/manuals/PortableApps.comLauncher/

You can find examples of basic INIs in most of our apps. Things like AkelPad or AIMP.

Sometimes, the impossible can become possible, if you're awesome!

Halphinian
Halphinian's picture
Offline
Last seen: 8 years 8 months ago
Joined: 2015-07-22 12:03
About .ini's

I very much appreciate your help, this helps me a ton, but I have a couple of questions about this new .ini
1: Since the one I previously posted was wrong, does this mean I have to make a new .ini for it? (I expect so)
2: This app I am trying to make portable is a simple .exe that uses a local storage system that is set up the first time you run it on a computer (it's kind of weird). I looked at multiple portable apps, including the ones you mentioned, and found that they were too complicated for this lonely .exe. As I have said before, I am very new to programming, so I need some kind of template to begin this file, and this template has to be the simplest one available, so do you know of any simple apps on this site that don't have internal directories or anything, pretty much just an exe with the portableapps.com req.?
Thank you so much for the help!

John T. Haller
John T. Haller's picture
Online
Last seen: 3 min 41 sec ago
AdminDeveloperModeratorTranslator
Joined: 2005-11-28 22:21
Something Else Entirely

You haven't made an INI for the PA.c Launcher at all yet. What you posted has nothing at all to do with PA.c Launcher. It's a random INI from something else. INI files are configuration files. They're not interchangeable.

Sometimes, the impossible can become possible, if you're awesome!

Halphinian
Halphinian's picture
Offline
Last seen: 8 years 8 months ago
Joined: 2015-07-22 12:03
So how would I go about

So how would I go about making one? I tried reading that manual that you linked me to and didn't understand a word of it.

Ken Herbert
Ken Herbert's picture
Online
Last seen: 22 min 39 sec ago
DeveloperModerator
Joined: 2010-05-25 18:19
Our official catalog has apps

Our official catalog has apps with a lot of different portability requirements you can look at to get an idea.

Start out with something very basic, and look at the docs John linked you to while you are checking them out. This will give you a good basis for the bare requirements before moving on to the more advanced topics. I've listed some apps below with what each can teach you (disclaimer: all are apps I have had released, just because I know them better to tell you what you can learn from them).

dotNETInspector is quite basic, and a good place to start. The app itself is innately portable, all the PortableApps Launcher does is run the executable with a specific command line parameter (the path to the default export directory), then close. It doesn't even wait to clean up after the base app exits because there is nothing to clean up.

Then move on to other apps:

  • BabelMap has very basic registry handling.
  • Artha features environment variables, moving a single file, cleaning up empty folders, and changing the working directory.
  • Pencil Project has find/replace for settings in a file (there are basically two sections, FileWrite1 - FileWrite3 do the exact same thing as FileWrite4 - FileWrite6, just in a different format and a different file, because the app needs both)

One of the last things to learn (which you may or may not care about) is language switching. This is usually very different for each app. If/when you do get to this stage, we can help you further.

Log in or register to post comments