Wildcards in registry keys would be quite difficult to handle, but not useful in almost any cases, and so I do not propose to do it - yet at least.
I might implement Windows version requirements at some point, at least to say "This doesn't run on Windows 2000", but I don't think it tends to be worthwhile. Very few things don't work on Windows 2000, and if they don't they'll tend to crash and you'll understand that it doesn't work on that OS. And Windows 95/98/Me will soon be completely broken by the Launcher (and Installer) as we move to Unicode builds of NSIS; you won't even get to say "doesn't work on Windows 98", it'll just crash immediately. That's what happens with things compiled with NSISu.
I don't really feel like putting in firewall manipulation with yet another plug-in. I'm trying to avoid using plug-ins where practical as they tend to make things bigger than they need to be and there's also then the bother of unloading them. I might try implementing it in System::Calls (which I would likewise expect to be one liners).
I'm considering adding some code to the PortableApps.com Installer so that online installers can use an already-downloaded installer; but as for using an already-installed instance, I don't think that's generally a good idea, especially for version reasons. I would advise you to only use an online installer and not try copying an installation at all. I have no real intention of adding a fallback executable.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I've just committed a major backwards-incompatible change, to do with replacement variables now using the normal environment space. See this changeset for an updated help.html and more info.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Yes, another change. I've moved drive letter updating into a new FileWrite type, Replace. Specify Find and Replace and whiz, it does a find and replace. This should be useful for some applications which may have things like in them which aren't file mentions and shouldn't be updated, and where you just want to update e.g. file:///%PAL:LastDrive%/ to file:///%PAL:Drive%/. Before you could only do replacement of X:\ and X:/, now you can take the drive letter (and the colon) in any form.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Could you give me an example of how this would be used to emulate the old FileDriveLetterUpdate behavior? I'm having a bit of a hard time wrapping my head around just how this is going to work.
Also, won't the new method result in the drive letter being updated (thus wasting time) regardless of whether or not it actually changed? Firefox and Thunderbird for example take forever to launch when the drive letter changes, so the ability to not have it do those updates if they're not needed is a definite plus.
With all these big changes, you might want to do a new release once you're done.
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
I just commented out two lines so _DebugMsg_DEBUG isn't defined unless one of the "bigger" debug constants is; the extra code is so people can put the fix in the appropriate code section with as little trouble as possible.
Also, what settings can verbose have?
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
Sorry about that, I wrote it in a roundabout manner and didn't review it properly. What I had meant was to have a "global" debugging flag - so the !else should have been !else ifdef DEBUG_GLOBAL.
Currently verbosity is only at the compiler level; some time I'll be putting in a debug verbosity flag too.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Regardless of whether I quote or unquote %PAL:DataDir%, KidSafe always gets the same result: an unquoted path. When the path contains spaces, KidSafe errors out and creates the data folder in the wrong spot; that's how I learned there was a problem in the first place.
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
That passes the quotes OK, but KidSafe still won't recognize the value. It could be a problem with a change I introduced earlier; I'll have to take a look.
Thanks for the tip!
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
It's time to have a play with your new launcher. I have quickly made a simple launcher, and figured out the basics. It worked fine for me.
Now for a slightly higher degree of difficulty. Move an ini file to the c: drive. I cannot get a file copy to work. I am not clear on the syntax requirements under the [FilesMove] section of your help file. If I want to copy the junk.ini file from x:\PortableApps\AppName\junk.ini to c:\Documents and Settings\user\Application Data\AppName\junk.ini, and then back after running the portable app, the commands in the Launcher.ini file would look like.....?
Can you give me the two or three line example please? This will get me moving.
Firstly, the launcher itself seems to require admin rights and if I cancel gives me error 1223. Secondly, after that pop up is closed, another appears stating that it cannot find appinfo.ini or launcher.ini when they are in the correct folder.
I think I see what the issue is now; unbeknownst to poor ol' me, the UAC plug-in is causing $EXEDIR to change in the inner (admin) instance. The very fact that it was trying to elevate showed me that either something was really badly wrong which I couldn't see or that you were indeed using RunAsAdmin - that gets checked before the launcher.ini stuff. I had never had a proper chance to test RunAsAdmin myself, and so I merely thought it should work. Now I'll need to try working out where the executable ends up when running as admin - I really must set up a Windows VM or go to Uni to check it out.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
If it helps anything, it gives me that error whether or not I have admin privs or not, and even when I do it comes up with a popup asking to allow the program to do stuff to my comp (I suppose that's supposed to happen though with a program requiring admin privs?)
1st - I'm Having Trouble With The Registry I Want To Have The HKLM And HKCU Backup. But The Launcher only Backups The HKCU. How Can I Have Both Of Them.
2nd - Some Of My Software Installs dll's in windows and system32 directory and you nethier have both can you add them
HKEY_LOCAL_MACHINE requires running as administrator. If you want you can try [Launch]:RunAsAdmin but as scriptdaemon has observed it seems to have serious issues with it at the moment which I haven't yet been able to check up on. As for putting DLLs in %WINDIR% or sys32, you should be able to just have them in App\AppName (you may possibly need [Environment]:PATH=%PATH%;%PAL:AppDir%\AppName).
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Renamed [Launch]:AssignContainedTempDirectory to [Launch]:CleanTemp.
Renamed [Launch]:DefaultCommandLineArguments to [Launch]:CommandLineArguments.
Renamed [Launch]:SetOutPath to [Launch]:WorkingDirectory.
I did these to make them more accurate and the first two shorter as they were overly verbose. I thought of renaming [Launch]:ProgramExecutable to [Launch]:Run, and also of the possibility of then merging Run and CommandLineArguments into CommandLine, but I refrained.
Oh, and I think I've fixed RunAsAdmin as well.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Sorry for the double-posting, but did you already read this?
If you want to include it, I think I'd now be able to put the code into a segment for the launcher after looking at its source a bit.
Tell me if I should do so.
[EDIT 1] I of course mean segment, not section
"Der Klügere gibt nach, deshalb regieren Dumme die Welt."
I've seen it but I'm not intending to put this in; it's a corner case (I've never come across anything which could benefit from something like that) and it adds to the general clutter still more (in some ways I'd like it if I could separate all segments into DLL files so you could just include what you need; it's not practical though, and it'd end up make things bigger again which is part of what I'm trying to avoid).
I think a general guideline for inclusion is "will be used by at least several applications". I could consider implementing a stripped down version but not yet in any case.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
John and I had a long discussion yesterday which involved me implementing the things he had been going to implement; I've done one of the two things so far. John's changes have been entirely in the internals of the launcher, and trying to improve stability (we'd both been thinking about this and had slightly different solutions; the main difference is that in case of power failure mine tends more towards making sure you get your data back, John's makes sure the computer is left clean, particularly if the disk is removed which is something I hadn't really thought about much).
What do you think is not organised enough about the launcher?
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Maybe take a hint from wraithdu's Sandboxie Portable - it's got one launcher, SandboxiePortable.exe, for launching Sandboxie and one other launcher, CrashCleanup.exe, to bring back data, clean up, etc. after a crash. I've been thinking about the stability thing for some time, and this seems to be the best way, IMHO. Benefits:
* Users can still get their data back
* The host PC can stay clean (and no worries about having the disk/USB stick removed - users would need to run CrashCleanup from the disk/USB stick)
Downsides:
* Users have to run a separate executable to clean up after a crash; that's somewhat inconvenient, but users will probably be willing to do it to get their data back.
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
Part of our PA.c Format standard will be that if the drive is removed, the app should shut down and clean up the host PC, returning it to the state that it was before the app was run. Users won't be losing anything document-wise (since those are saved on their device and should have an auto-save in an app like OpenOffice.org) or bookmarks or email-wise (since those are also kept on the stick). But they will lose any transient settings that were in local registry or APPDATA. This is by design and will be required. We err on the side of (1) keeping the local PC unaffected and (2) ensuring that none of the user's personal data is left behind.
A similar situation will apply in a power outtage or PC crash. We will be storing backed up registry keys and appdata in a central location so our platform's failsafe can restore the PC to its original state when it boots up, removing the portable information and restoring all PC registry keys and appdata files. This is again for the two reasons stated above. Users are unlikely to lose anything important as mentioned above.
As an additional note, many apps crash on an unsafe eject as soon as they try to write to disk (Firefox and Thunderbird, for example), so you won't be losing anything from that. And as for registry keys and settings in AppData, many apps only save those settings out on exit and, since the app crashed (basically what happens in a power outtage or PC crash, too), no new data is in the registry or AppData to preserve anyway.
As for app crashes, the portable launchers will recover from that just as with anything else. The launcher is a separate process, so if FF crashes FFP shuts down just fine as always.
Sometimes, the impossible can become possible, if you're awesome!
I had considered it, but I was going to do a much cleaner implementation - single executable, detects the state of the last instance and continues on from there (i.e. it'd run the .onInit, Init, Post* and Unload hooks, skipping the Pre* and PreExec* hooks and the actual execution).
I still don't entirely agree with John's statements of what should happen, but I'm much more in favour of it after having thought about it extensively; I have engineered the launcher from the start so that data which gets copied locally is not deleted from the USB disk until the updated data is ready to be copied in (this doesn't address the issue though when the files which should be moved back or at least cleaned up are on the disk that got removed). But it is just that session's changes that are lost, not all your settings (or at least it won't be all your settings by the time I'm finished; currently applications that store things while running in the App directory will really get messed up).
Making sure things aren't left behind is pretty important.
There are still going to be times when we can't clear everything up, but we can try.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Is there a way of creating multiple launchers for multiple executables? I haven't found a way of doing this, since it seems there can only be one launcher.ini file, but I've got a certain "pet project" I'd like to do in a week or so that will require multiple launchers, because it's got multiple executables with different functionality.
Thanks!
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
As all ~100 of our apps and all the dev tests we have use only a single launcher except one (OpenOffice.org, which will be switching to a single launcher as well), we had decided not to support more than one EXE. If you could give more details about this app and why it requires distinct launchers, we might reconsider. But as of now, there is no need to add to the complexity of the launcher and the format.
Sometimes, the impossible can become possible, if you're awesome!
JTHAs all ~100 of our apps and all the dev tests we have use only a single launcher except one (OpenOffice.org, which will be switching to a single launcher as well)
Good joke, John.
There are several games which have more than one launcher (e.g. one for the game and one for a LAN-Server). And there are other apps too. (If I remember correctly, CamStudio Portable has 4 launchers.)
Well, I don't care what's planned or not cause I'll never use the (always limited and never universal) PortableApps.com launcher. :evil:
Many of those extra launchers are only to feed specific command-line arguments. Those will be contained within the AppInfo.ini and separate icons will show up that feed those in without the need for multiple launchers. That's what we're doing with OO.o, for example. There may be a few outliers, of course, and I haven't personally tested all the Dev Tests. I'd meant to say all of the dev tests I've tried, not all of them.
We'll be adding the functionality of nearly all our other launchers into the universal launcher, so it will eventually serve the need of nearly all apps, rather than reinventing the wheel each time and having to maintain 100 different code branches. There no need to poo-poo it or be an ass about it.
Sometimes, the impossible can become possible, if you're awesome!
The app I'm talking about is REAL Studio; before anyone starts yelling about me doing a commercial product,
#1 I'm not distributing REAL Studio, just a launcher, and
#2 I already got permission from REAL Software (actually got permission several months ago; I just haven't done anything with it until now).
REAL Studio has two components: the IDE and the Feedback utility. Because they're two separate apps, I need two separate launchers (unless I build two separate portable packages, but that's going to be very messy - especially since REAL Studio has the option to launch the Feedback app).
If it's better (and judging from your post, it might be), I could create a custom launcher; it wouldn't be hard to do, and it sounds like that would save you & Chris Morgan a lot of time & headaches.
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
Ok. I've been reconsidering my position on this anyway, so I think I have a solution. Chris, how about we support multiple launchers as an option. I'd like to stick with launcher.ini when there's just one for simplicity, if that works for you, too. For multiple, we could have them look for launcher-LAUNCHERNAME.EXE.ini, which makes it very easy to keep them separate.
So the launcher can check for launcher.ini first, if it's not there it checks for launcher-LAUNCHERNAME.EXE.ini, if that's not there, it just runs whatever is set in AppInfo.INI's Control - Start section. (If it finds itself there, it'll throw an error). Would that line of thinking make sense? We can ditch the EXE from the INI as well for prettiness if you'd like (just another line of code).
Sometimes, the impossible can become possible, if you're awesome!
Glad to hear we're going to support multiple launchers! That makes things like RS much easier to implement.
Any way I can help with that?
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
I'll implement launcher-LauncherFileName.ini. In some ways it'd be nicer to have it in a single file, but we've got more than one INI section so it'd end up looking very ugly.
I reckon the default one should be called just launcher.ini:
AppNamePortablePlayer.exe - doesn't find launcher-AppNamePortablePlayer.ini and so uses launcher.ini
In some applications it will be harder to decide which should be the "default" of more than one, but I think it'd be better for single applications to just have "launcher.ini". Of course, there's also the option of going back to how I used to do it - App\Launcher\AppNamePortable.ini (and make it App\AppInfo\Launcher\AppNamePortable.ini).
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Would you be happier going back to the old way of a Launcher directory with individual INIs in it? At this point, that may make more sense. And for anything we do automated with updating launchers or INIs in the installer or something later, we can just go through the list of INIs in that directory.
Sometimes, the impossible can become possible, if you're awesome!
In The Data Folder. Can't You Just Make it Like This.
An AppData, LocalAppData, WinDir Folders And Then Users Just Copy The File In There That the portable App Needed so that newbies like me don't get confused in the launcher.ini and this is more easy and practical.
Once this is done we're going to have sample launcher.ini files for simple apps (like just a command line or just an APPDATA directory) to make it easier.
Sometimes, the impossible can become possible, if you're awesome!
I want to use your launcher as the launcher for Unicode NSIS Portable.
But I ran into a few specific NSIS Portable issues:
1. NSIS Portable is normally set-up to run NSIS.exe. But if I drag'n drop a file onto the portable launcher it will send the parameters to makensisw.exe.
But I do realize it will be work to implement this, probably just to be used by one specific app.
2. NSIS Portable needs 3 default executable's to wait for, before it can clean-up !
[Launch]
ProgramExecutable=NSIS\NSIS.exe
WaitForEXE=makensisw.exe
;=== really I would need some line like the following
WaitForEXE2=zip2exe.exe
Hmm... maybe I should add a WaitForEXE section. What do you think, John?
As for drag and drop, I think that it is quite plausible that it could be used in more than one application, and have something like ProgramExecutableWhenParameters.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Remember the code I wrote earlier to handle WaitForEXE? I remember it had an issue or two (primarily that it would fail on restarting processes), but I could probably get those worked out pretty quickly. Luckily, I have Notepad++ on my USB stick so I can work on that even though my laptop's out of action.
Want me to update that code?
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
I'm curious as to how you'll do it. Mind sharing the details?
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
I take it ${|} is a statement end, much like { and } in C++?
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
${|} is the way of specifying a delimiter with LogicLib; literally, it's a single quote:
LogicLib.nsh, line 81!define | "'"
It's part of the single-line IfThen structure, making it so that the code inside comes as one argument rather than lots which is untenable with macros, so that it can be then used verbatim. It'd be perfectly valid to do something like ${IfThen} ${Errors} "StrCpy $0 $1"... but you wouldn't get syntax highlighting that way in any editors.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Unfortunately this has put me a little behind schedule and so I don't think I'm going to manage a release today. Just got a bit more polish to do. I might make it (I've got a bit under three quarters of an hour; if it's not up by then you'll know you need to wait until at least tomorrow).
Edit: not going to manage a release; primary reason: too many release notes to write in ten minutes. If you feel like going through the changesets in the hg repo and constructing release notes for me detailing all changes, please do.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
But please, do not let me put you of your next release! It can probably wait for next time, and I can pull the fixes of mercurial anyway !
1. What about implementing the NewTextReplace plugin, so we are able to update utf-16 files as well. Anyway this is the plugin which is used in UnicodeNsisPortable(but there it's named TextReplace.dll for compatibility). But it could wait till you're using unicode to compile.
2. What about appending a registry file, at the moment I got to do it this way:
3. Shouldn't [DirectoriesCleanupForce] first backup it self, so keys couldn't accidentally be deleted from the host.
4. About the services, I'm trying mp3gain-win-full-1_2_5.zip, the launcher seems to register the service, but on exit the launcher goes into a heavy loop.
This is what my PAL ini looks like:
But it's the first time I take a look at "what PortableApps.com Launcher may look like" and it looks very powerfull (service managment ?) and understandable (ini based).
Just ported SharpDevelop to Beta 4, and now I'm getting weird drive letter replacement behavior again. For example, in my default settings, I have the project path set to P:\Documents\Projects, with the LastDrive in DefaultData set to P:. However, when I run SD the first time, the path gets changed to this oddity:
Also, the find/replace scheme seems like it would break if DefaultData contains default settings but no AppPortableSettings.ini--just like my HxD bug from a while back. DriveLetterUpdate was a better scheme, IMO.
Are you using the hg version? I realised what I'd done just after the last release and fixed it immediately (so that the "letter" becomes NONE, i.e. %PAL:LastDrive% = NONE:).
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I was using Alpha 4. Still, there's the chance the string "NONE:" could legitimately occur in a DefaultData file, and this would cause errors. I still stand by my assertion that FileDriveLetterUpdate was better. If there's no last drive, then no substitution should be attempted at all; unfortunately find-and-replace is unconditional.
No you can't--%PAL:Drive% and %PAL:LastDrive% both contain a colon. Unless that was a typo and you meant file:///X:/, in which case that would already have been picked up by ForwardSlashN.
I do have to concede that false positives are possible in both cases, however. I'm just not sure search-and-replace gains me anything for the extra lines I need in launcher.ini.
That's why I added PAL:DriveLetter. I didn't mean file:///X:/ Also, it's feasible that X:/ could be used in a file in a way that you don't want to replace, and you only want to replace it when it's got file:/// in front. Also there can be other messy situations. The main reason I added the *Letter variants was Eclipse Portable - it escapes the : with a \, and so it needs to use %PAL:DriveLetter%\: (I've been wondering about scrapping PAL:Drive but don't really think I need to).
Part of the reason I switched from the old way was that the ForwardSlashN and BackslashN method was just ugly. This is a much nicer-looking, pure solution. (Possibly even better would be naming the INI section "File Write N" rather than "FileWriteN"...)
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
CamelCase is the de facto standard for INI sections and value names. Putting spaces in it might confuse the Windows INI parser too, but I'm not sure. Either way the spaces would make it uglier (IMO), not cleaner.
I can definitely tell you're a perfectionist, but don't try to make it too perfect, or PAL will never get out of alpha.
One thing I'm curious about though: What program uses file:///X/? I've never seen a file URL without a colon after the drive letter. Certainly no browser will recognize such a path.
Never fear though, you'll find this in Beta fairly soon now.
file:///X/ has been used in the past by Firefox; now I believe they've accepted the : and use it everywhere. A : in the URL used to seem evil though. Anyway, It was just an example
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Hi Chris,
I've updated the German.nsh with the new strings.
If I'll time for having a look at mercurail I'll update directly (next time).
${LangFileString} LauncherFileNotFound "$AppNamePortable kann nicht gestartet werden. Bitte installieren Sie die Anwendung ggf. neu. (FEHLER: $MissingFileOrPath wurde nicht gefunden.)"
${LangFileString} LauncherAlreadyRunning "Es läuft bereits eine andere Instanz von $AppName. Bitte schließen Sie erst alle anderen Instanzen von $AppName, bevor Sie $AppNamePortable starten."
${LangFileString} LauncherAskCopyLocal "$AppNamePortable scheint an einem Ort ohne Schreib-Zugriff zu laufen. Möchten Sie eine temporäre Kopie auf Ihrer lokalen Festplatte erstellen und das Programm von dort aus starten?$\n$\nHinweis zum Datenschutz: Wenn Sie Ja sagen, werden Ihre persönlichen Daten aus $AppNamePortable temporär auf Ihre lokale Festplatte kopiert. Diese Daten werden zwar wieder gelöscht, sobald Sie $AppNamePortable schliessen, können aber unter Umständen trotzdem von Dritten gelesen werden."
${LangFileString} LauncherNoReadOnly "$AppNamePortable kann nicht direkt von einem Ort ohne Schreib-Zugriff gestartet werden und wird jetzt geschlossen."
${LangFileString} LauncherPathTooLong "Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürzen Sie den Pfad durch die Auslassen einiger über dieser Anwendung liegenden Verzeichnissse oder durch Kürzen der Verzeichnisnamen."
${LangFileString} LauncherNoUNCSupport "$AppNamePortable kann nicht aus einem UNC-Netzwerkpfad gestartet werden. Bitte ordnen Sie dem Netzlaufwerk einen Laufwerksbuchstaben zu und versuchen Sie es dann erneut."
${LangFileString} LauncherNoSpaces "$AppNamePortable kann nicht aus einem Verzeichnis mit Leerzeichen gestartet werden. Bitte ändern sie den aktuellen Pfad ($EXEDIR) und entfernen Sie alle Leerzeichen. Starten Sie dann die portable Anwendung neu. Weitere Informationen erhalten Sie in der help.html."
${LangFileString} LauncherRequiresAdmin "$AppNamePortable erfordert zur Ausführung administrative Rechte."
${LangFileString} LauncherNotAdminTryAgain "Bitte 'Wiederholen' klicken, um die Authentifizierung erneut zu versuchen oder 'Abbruch' zum Beenden."
${LangFileString} LauncherNotAdminLimitedFunctionality "Einige Funktionen von $AppNamePortable werden nicht funktionieren, wenn Sie sie nicht als Administrator ausführen."
${LangFileString} LauncherNotAdminLimitedFunctionalityTryAgain "Klicken Sie 'abbruch' zum Beenden, 'Widerholen', um die Authentizierung erneut zu versuchen oder 'Ignorieren', um trotzdem weiter zu machen."
${LangFileString} LauncherAdminError "Ausführung als Administrator nicht möglich, Fehler $0"
${LangFileString} LauncherAdminLogonServiceNotRunning "$AppNamePortable erfordert administrative Rechte, aber der Windows Logon Service läuft nicht. $AppNamePortable kann nicht gestartet werden."
Paid for Software more or less?
What You need is OSS!
Just one thing I'd like to verify; the LauncherPathTooLong string was:
"Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürze Sie den Pfad durch die Auslassen einiger über dieser Anwendung liegenden Verzeichnissse oder durch Kürzen der verzeichnisnamen."
You've changed it to
"Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürzen Sie den Pfad durch die Auslassen einiger über dieser Anwendung liegenden Verzeichnissse oder durch Kürzen der Verzeichnisnamen."
There are two differences: you've added an "n" to "verkürze" to make it "verkürzen", and you've made the first letter of the final word ("verzeichnisnamen") capital.
I've committed it to the repository, it even says that you've committed it
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
But I've found another one. Final:
"Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürzen Sie den Pfad durch Auslassen einiger über dieser Anwendung liegenden Verzeichnissse oder durch Kürzen der Verzeichnisnamen."
("die" in front of Auslassen was wrong, but now it's perfect )
Paid for Software more or less?
What You need is OSS!
durch Auslassen einiger über dieser Anwendung liegenden Verzeichnissse
I don't understand. What should the user do?
And a suggestion (fixes two typos and has a different end):
${LangFileString} LauncherNotAdminLimitedFunctionalityTryAgain "Klicken Sie 'Abbruch' zum Beenden, 'Wiederholen', um die Authentizierung erneut zu versuchen oder 'Ignorieren', wenn Sie trotzdem fortfahren möchten."
... hast Du eine bessere Idee? / do You have a better idea?
Thank You for fixing the typos, I found another: "Authentizierung" should be better "Authentifizierung"
${LangFileString} LauncherNotAdminLimitedFunctionalityTryAgain "Klicken Sie 'Abbruch' zum Beenden, 'Wiederholen', um die Authentifizierung erneut zu versuchen oder 'Ignorieren', wenn Sie trotzdem fortfahren möchten."
Paid for Software more or less?
What You need is OSS!
I know (I've read the english string ;)). At the moment, I don't have a better idea, but the current string looks a bit strange IMO.
(Ich weiß nicht, ob ein unerfahrener Nutzer versteht was gemeint ist bzw. was er machen soll.)
Wie wärs mit: "Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürzen Sie den Pfad, indem Sie diese Anwendung woanders hin kopieren oder den Verzeichnisnamen ändern."
Not perfect aber imho besser verständlich.
"What about Love?" - "Overrated. Biochemically no different than eating large quantities of chocolate." - Al Pacino in The Devils Advocate
How about:"Der Pfad zu $AppNamePortable ist zu lang. Bitte wählen Sie einen kürzeren Verzeichnisnamen oder einen Installationsordner der weniger Zeichen enthält." ?
Paid for Software more or less?
What You need is OSS!
I'd put the part about the installation folder at the beginning because its more effective (If I have my folder deep enough, changing the folder name wont help me).
Seit wann enthält ein Ordner Zeichen???
What about "installationsordner dessen Pfad kürzer ist"?
You (as a mod) could maybe move all these comments to a new thread as we are kinda hijacking Chris's thread.
"What about Love?" - "Overrated. Biochemically no different than eating large quantities of chocolate." - Al Pacino in The Devils Advocate
how about:
"Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürzen Sie den Pfad ihres Installationsordners". Short and simple.
I don't think that we're hijackers 8)
to create a thread in Localization Discussion. I thought about it but didn't get round to it... maybe I should and then move your comments to it (a slow task as it involves duplicating each comment manually).
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
${LangFileString} LauncherFileNotFound "$AppNamePortable kann nicht gestartet werden. Bitte installieren Sie die Anwendung ggf. neu. (FEHLER: $MissingFileOrPath wurde nicht gefunden.)"
${LangFileString} LauncherAlreadyRunning "Es läuft bereits eine andere Instanz von $AppName. Bitte schließen Sie erst alle anderen Instanzen von $AppName, bevor Sie $AppNamePortable starten."
${LangFileString} LauncherAskCopyLocal "$AppNamePortable scheint an einem Ort ohne Schreib-Zugriff zu laufen. Möchten Sie eine temporäre Kopie auf Ihrer lokalen Festplatte erstellen und das Programm von dort aus starten?$\n$\nHinweis zum Datenschutz: Wenn Sie Ja sagen, werden Ihre persönlichen Daten aus $AppNamePortable temporär auf Ihre lokale Festplatte kopiert. Diese Daten werden zwar wieder gelöscht, sobald Sie $AppNamePortable schliessen, können aber unter Umständen trotzdem von Dritten gelesen werden."
${LangFileString} LauncherNoReadOnly "$AppNamePortable kann nicht direkt von einem Ort ohne Schreib-Zugriff gestartet werden und wird jetzt geschlossen."
${LangFileString} LauncherPathTooLong "Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürzen Sie den Pfad ihres Installationsordners"
${LangFileString} LauncherNoUNCSupport "$AppNamePortable kann nicht aus einem UNC-Netzwerkpfad gestartet werden. Bitte ordnen Sie dem Netzlaufwerk einen Laufwerksbuchstaben zu und versuchen Sie es dann erneut."
${LangFileString} LauncherNoSpaces "$AppNamePortable kann nicht aus einem Verzeichnis mit Leerzeichen gestartet werden. Bitte ändern sie den aktuellen Pfad ($EXEDIR) und entfernen Sie alle Leerzeichen. Starten Sie dann die portable Anwendung neu. Weitere Informationen erhalten Sie in der help.html."
${LangFileString} LauncherRequiresAdmin "$AppNamePortable erfordert zur Ausführung administrative Rechte."
${LangFileString} LauncherNotAdminTryAgain "Bitte 'Wiederholen' klicken, um die Authentifizierung erneut zu versuchen oder 'Abbruch' zum Beenden."
${LangFileString} LauncherNotAdminLimitedFunctionality "Einige Funktionen von $AppNamePortable werden nicht funktionieren, wenn Sie sie nicht als Administrator ausführen."
${LangFileString} LauncherNotAdminLimitedFunctionalityTryAgain "Klicken Sie 'Abbruch' zum Beenden, 'Wiederholen', um die Authentifizierung erneut zu versuchen oder 'Ignorieren', wenn Sie trotzdem fortfahren möchten."
${LangFileString} LauncherAdminError "Ausführung als Administrator nicht möglich, Fehler $0"
${LangFileString} LauncherAdminLogonServiceNotRunning "$AppNamePortable erfordert administrative Rechte, aber der Windows Logon Service läuft nicht. $AppNamePortable kann nicht gestartet werden."
Paid for Software more or less?
What You need is OSS!
200 comments over 3 pages - it's getting difficult to find newer posts. Definitely time for a new thread.
Plenty of new stuff in Mercurial right now - time for a new release, IMHO.
I'm looking forward to this!
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
I was thinking I should implement your modifications before moving PAL to Beta (and a new thread); however possibly not. The thread is very long already. Currently I think pre-1.0 tasks are:
Fix RegistryKeys in Wine (restoring key into registry doesn't seem to work)
Disable services (while it's a plug-in it's fairly big, something like 25KB compressed, need to sort out the dependencies null-byte thing and go back to plain NSIS code)
Copy launcher.ini somewhere and cope with detecting disk removal and cleaning up
Related to the above: handle restoring things in such a situation where the files are on the disk which was removed, next time it's started (e.g. when a file is moved to App).
Oh, and my new documentation.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I've just committed a major backwards-incompatible change, to do with replacement variables now using the normal environment space. See this changeset for an updated help.html and more info.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I've merged FileWriteINI and FileWriteConfigWrite.
Now I'm moving drive letter updating into another type of FileWrite: Replace.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Yes, another change. I've moved drive letter updating into a new FileWrite type, Replace. Specify Find and Replace and whiz, it does a find and replace. This should be useful for some applications which may have things like in them which aren't file mentions and shouldn't be updated, and where you just want to update e.g. file:///%PAL:LastDrive%/ to file:///%PAL:Drive%/. Before you could only do replacement of X:\ and X:/, now you can take the drive letter (and the colon) in any form.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Could you give me an example of how this would be used to emulate the old FileDriveLetterUpdate behavior? I'm having a bit of a hard time wrapping my head around just how this is going to work.
Also, won't the new method result in the drive letter being updated (thus wasting time) regardless of whether or not it actually changed? Firefox and Thunderbird for example take forever to launch when the drive letter changes, so the ability to not have it do those updates if they're not needed is a definite plus.
If Find and Replace are the same, the replacement is skipped.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
With all these big changes, you might want to do a new release once you're done.
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
(I'm planning on not making a new thread until we get to beta, or possibly page 3 if it takes that long.)
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Debug messages are pretty hard to turn off; there's actually a bug that keeps them from ever being turned off.
should be
I just commented out two lines so _DebugMsg_DEBUG isn't defined unless one of the "bigger" debug constants is; the extra code is so people can put the fix in the appropriate code section with as little trouble as possible.
Also, what settings can verbose have?
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
Sorry about that, I wrote it in a roundabout manner and didn't review it properly. What I had meant was to have a "global" debugging flag - so the
!else
should have been!else ifdef DEBUG_GLOBAL
.Currently verbosity is only at the compiler level; some time I'll be putting in a debug verbosity flag too.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Looks like %PAL:DataDir% is failing on paths with spaces. For the KidSafe launcher, here's my launcher.ini:
Regardless of whether I quote or unquote %PAL:DataDir%, KidSafe always gets the same result: an unquoted path. When the path contains spaces, KidSafe errors out and creates the data folder in the wrong spot; that's how I learned there was a problem in the first place.
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
Try quoting the INI value - it may be a problem with the Microsoft INI parsing engine.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
That passes the quotes OK, but KidSafe still won't recognize the value. It could be a problem with a change I introduced earlier; I'll have to take a look.
Thanks for the tip!
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
Chris,
It's time to have a play with your new launcher. I have quickly made a simple launcher, and figured out the basics. It worked fine for me.
Now for a slightly higher degree of difficulty. Move an ini file to the c: drive. I cannot get a file copy to work. I am not clear on the syntax requirements under the [FilesMove] section of your help file. If I want to copy the junk.ini file from x:\PortableApps\AppName\junk.ini to c:\Documents and Settings\user\Application Data\AppName\junk.ini, and then back after running the portable app, the commands in the Launcher.ini file would look like.....?
Can you give me the two or three line example please? This will get me moving.
Regards,
Kim
Kim
You can only copy files inside Data (in accordance with the PortableApps.com Format).
To copy X:\PortableApps\AppNamePortable\Data\junk.ini to C:\Documents and Settings\user\Application Data\AppName\junk.ini:
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Thank you Chris,
I will experiment. There will be more dumb questions!
Regards,
Kim
Kim
Firstly, the launcher itself seems to require admin rights and if I cancel gives me error 1223. Secondly, after that pop up is closed, another appears stating that it cannot find appinfo.ini or launcher.ini when they are in the correct folder.
It should only try to get admin if you have
[Launch]:RunAsAdmin=try|force
in ./App/AppInfo/launcher.ini.Where are you putting everything, and how? Could you please enlighten me as to your entire directory structure and the contents of your launcher.ini?
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I do use RunAsAdmin=try, but since it didn't find those two files at all I didn't think that's what caused it.
Both files are in F:\PortableApps\RevoUninstallerPortable\App\AppInfo
[Launch]
ProgramDirectory=RevoUninstaller\revouninstaller.exe
RunAsAdmin=try
SingleAppInstance=true
[FilesMove]
settings\settings.ini=%PAL:APPDIR%\RevoUninstaller
I think I see what the issue is now; unbeknownst to poor ol' me, the UAC plug-in is causing $EXEDIR to change in the inner (admin) instance. The very fact that it was trying to elevate showed me that either something was really badly wrong which I couldn't see or that you were indeed using RunAsAdmin - that gets checked before the launcher.ini stuff. I had never had a proper chance to test RunAsAdmin myself, and so I merely thought it should work. Now I'll need to try working out where the executable ends up when running as admin - I really must set up a Windows VM or go to Uni to check it out.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I found a bug?
If it helps anything, it gives me that error whether or not I have admin privs or not, and even when I do it comes up with a popup asking to allow the program to do stuff to my comp (I suppose that's supposed to happen though with a program requiring admin privs?)
1st - I'm Having Trouble With The Registry I Want To Have The HKLM And HKCU Backup. But The Launcher only Backups The HKCU. How Can I Have Both Of Them.
2nd - Some Of My Software Installs dll's in windows and system32 directory and you nethier have both can you add them
HKEY_LOCAL_MACHINE requires running as administrator. If you want you can try
[Launch]:RunAsAdmin
but as scriptdaemon has observed it seems to have serious issues with it at the moment which I haven't yet been able to check up on. As for putting DLLs in %WINDIR% or sys32, you should be able to just have them in App\AppName (you may possibly need[Environment]:PATH=%PATH%;%PAL:AppDir%\AppName
).I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
tnx for the fast reply. i will try it
[Launch]:AssignContainedTempDirectory
to[Launch]:CleanTemp
.[Launch]:DefaultCommandLineArguments
to[Launch]:CommandLineArguments
.[Launch]:SetOutPath
to[Launch]:WorkingDirectory
.I did these to make them more accurate and the first two shorter as they were overly verbose. I thought of renaming
[Launch]:ProgramExecutable
to[Launch]:Run
, and also of the possibility of then merging Run and CommandLineArguments into CommandLine, but I refrained.Oh, and I think I've fixed RunAsAdmin as well.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I did a feature request for a registry backup function which accepts wildcards in the keys some days ago.
I've now done some code to do something like this with the search function of the registry plugin
Include into your launcher if you want.
Link to the file: http://www.speedyshare.com/files/21132272/BackupRegistrySearch.nsh
I think usage is self-explaning, but if not ask
"Der Klügere gibt nach, deshalb regieren Dumme die Welt."
Sorry for the double-posting, but did you already read this?
If you want to include it, I think I'd now be able to put the code into a segment for the launcher after looking at its source a bit.
Tell me if I should do so.
[EDIT 1] I of course mean segment, not section
"Der Klügere gibt nach, deshalb regieren Dumme die Welt."
I've seen it but I'm not intending to put this in; it's a corner case (I've never come across anything which could benefit from something like that) and it adds to the general clutter still more (in some ways I'd like it if I could separate all segments into DLL files so you could just include what you need; it's not practical though, and it'd end up make things bigger again which is part of what I'm trying to avoid).
I think a general guideline for inclusion is "will be used by at least several applications". I could consider implementing a stripped down version but not yet in any case.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
OK.
I'll still do this work as I'd need it for Steam Portable. When I've finished it, I'll drop a note here so anybody could include the code himself.
"Der Klügere gibt nach, deshalb regieren Dumme die Welt."
I Think I Will Wait For The Beta Release. The Launcher Is Not Organize Enough And John Hasn't Add Anything yet.
John and I had a long discussion yesterday which involved me implementing the things he had been going to implement; I've done one of the two things so far. John's changes have been entirely in the internals of the launcher, and trying to improve stability (we'd both been thinking about this and had slightly different solutions; the main difference is that in case of power failure mine tends more towards making sure you get your data back, John's makes sure the computer is left clean, particularly if the disk is removed which is something I hadn't really thought about much).
What do you think is not organised enough about the launcher?
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Maybe take a hint from wraithdu's Sandboxie Portable - it's got one launcher, SandboxiePortable.exe, for launching Sandboxie and one other launcher, CrashCleanup.exe, to bring back data, clean up, etc. after a crash. I've been thinking about the stability thing for some time, and this seems to be the best way, IMHO.
Benefits:
* Users can still get their data back
* The host PC can stay clean (and no worries about having the disk/USB stick removed - users would need to run CrashCleanup from the disk/USB stick)
Downsides:
* Users have to run a separate executable to clean up after a crash; that's somewhat inconvenient, but users will probably be willing to do it to get their data back.
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
Part of our PA.c Format standard will be that if the drive is removed, the app should shut down and clean up the host PC, returning it to the state that it was before the app was run. Users won't be losing anything document-wise (since those are saved on their device and should have an auto-save in an app like OpenOffice.org) or bookmarks or email-wise (since those are also kept on the stick). But they will lose any transient settings that were in local registry or APPDATA. This is by design and will be required. We err on the side of (1) keeping the local PC unaffected and (2) ensuring that none of the user's personal data is left behind.
A similar situation will apply in a power outtage or PC crash. We will be storing backed up registry keys and appdata in a central location so our platform's failsafe can restore the PC to its original state when it boots up, removing the portable information and restoring all PC registry keys and appdata files. This is again for the two reasons stated above. Users are unlikely to lose anything important as mentioned above.
As an additional note, many apps crash on an unsafe eject as soon as they try to write to disk (Firefox and Thunderbird, for example), so you won't be losing anything from that. And as for registry keys and settings in AppData, many apps only save those settings out on exit and, since the app crashed (basically what happens in a power outtage or PC crash, too), no new data is in the registry or AppData to preserve anyway.
As for app crashes, the portable launchers will recover from that just as with anything else. The launcher is a separate process, so if FF crashes FFP shuts down just fine as always.
Sometimes, the impossible can become possible, if you're awesome!
I had considered it, but I was going to do a much cleaner implementation - single executable, detects the state of the last instance and continues on from there (i.e. it'd run the .onInit, Init, Post* and Unload hooks, skipping the Pre* and PreExec* hooks and the actual execution).
I still don't entirely agree with John's statements of what should happen, but I'm much more in favour of it after having thought about it extensively; I have engineered the launcher from the start so that data which gets copied locally is not deleted from the USB disk until the updated data is ready to be copied in (this doesn't address the issue though when the files which should be moved back or at least cleaned up are on the disk that got removed). But it is just that session's changes that are lost, not all your settings (or at least it won't be all your settings by the time I'm finished; currently applications that store things while running in the App directory will really get messed up).
Making sure things aren't left behind is pretty important.
There are still going to be times when we can't clear everything up, but we can try.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Is there a way of creating multiple launchers for multiple executables? I haven't found a way of doing this, since it seems there can only be one launcher.ini file, but I've got a certain "pet project" I'd like to do in a week or so that will require multiple launchers, because it's got multiple executables with different functionality.
Thanks!
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
As all ~100 of our apps and all the dev tests we have use only a single launcher except one (OpenOffice.org, which will be switching to a single launcher as well), we had decided not to support more than one EXE. If you could give more details about this app and why it requires distinct launchers, we might reconsider. But as of now, there is no need to add to the complexity of the launcher and the format.
Sometimes, the impossible can become possible, if you're awesome!
Good joke, John.
There are several games which have more than one launcher (e.g. one for the game and one for a LAN-Server). And there are other apps too. (If I remember correctly, CamStudio Portable has 4 launchers.)
Well, I don't care what's planned or not cause I'll never use the (always limited and never universal) PortableApps.com launcher. :evil:
Many of those extra launchers are only to feed specific command-line arguments. Those will be contained within the AppInfo.ini and separate icons will show up that feed those in without the need for multiple launchers. That's what we're doing with OO.o, for example. There may be a few outliers, of course, and I haven't personally tested all the Dev Tests. I'd meant to say all of the dev tests I've tried, not all of them.
We'll be adding the functionality of nearly all our other launchers into the universal launcher, so it will eventually serve the need of nearly all apps, rather than reinventing the wheel each time and having to maintain 100 different code branches. There no need to poo-poo it or be an ass about it.
Sometimes, the impossible can become possible, if you're awesome!
The app I'm talking about is REAL Studio; before anyone starts yelling about me doing a commercial product,
#1 I'm not distributing REAL Studio, just a launcher, and
#2 I already got permission from REAL Software (actually got permission several months ago; I just haven't done anything with it until now).
REAL Studio has two components: the IDE and the Feedback utility. Because they're two separate apps, I need two separate launchers (unless I build two separate portable packages, but that's going to be very messy - especially since REAL Studio has the option to launch the Feedback app).
If it's better (and judging from your post, it might be), I could create a custom launcher; it wouldn't be hard to do, and it sounds like that would save you & Chris Morgan a lot of time & headaches.
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
Ok. I've been reconsidering my position on this anyway, so I think I have a solution. Chris, how about we support multiple launchers as an option. I'd like to stick with launcher.ini when there's just one for simplicity, if that works for you, too. For multiple, we could have them look for launcher-LAUNCHERNAME.EXE.ini, which makes it very easy to keep them separate.
So the launcher can check for launcher.ini first, if it's not there it checks for launcher-LAUNCHERNAME.EXE.ini, if that's not there, it just runs whatever is set in AppInfo.INI's Control - Start section. (If it finds itself there, it'll throw an error). Would that line of thinking make sense? We can ditch the EXE from the INI as well for prettiness if you'd like (just another line of code).
Sometimes, the impossible can become possible, if you're awesome!
Glad to hear we're going to support multiple launchers! That makes things like RS much easier to implement.
Any way I can help with that?
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
I'll implement launcher-LauncherFileName.ini. In some ways it'd be nicer to have it in a single file, but we've got more than one INI section so it'd end up looking very ugly.
I reckon the default one should be called just launcher.ini:
In some applications it will be harder to decide which should be the "default" of more than one, but I think it'd be better for single applications to just have "launcher.ini". Of course, there's also the option of going back to how I used to do it - App\Launcher\AppNamePortable.ini (and make it App\AppInfo\Launcher\AppNamePortable.ini).
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I've implemented it now.
It's about time to do another release tomorrow. I'll see if I can manage it.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Would you be happier going back to the old way of a Launcher directory with individual INIs in it? At this point, that may make more sense. And for anything we do automated with updating launchers or INIs in the installer or something later, we can just go through the list of INIs in that directory.
Sometimes, the impossible can become possible, if you're awesome!
OK, I'll do it in App\AppInfo\Launcher\AppNamePortable.ini.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Also the splash screen is moved to App\AppInfo\Launcher (still splash.jpg, no support for different splash screens).
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
In The Data Folder. Can't You Just Make it Like This.
An AppData, LocalAppData, WinDir Folders And Then Users Just Copy The File In There That the portable App Needed so that newbies like me don't get confused in the launcher.ini and this is more easy and practical.
Once this is done we're going to have sample launcher.ini files for simple apps (like just a command line or just an APPDATA directory) to make it easier.
Sometimes, the impossible can become possible, if you're awesome!
I want to use your launcher as the launcher for Unicode NSIS Portable.
But I ran into a few specific NSIS Portable issues:
1. NSIS Portable is normally set-up to run NSIS.exe. But if I drag'n drop a file onto the portable launcher it will send the parameters to makensisw.exe.
But I do realize it will be work to implement this, probably just to be used by one specific app.
2. NSIS Portable needs 3 default executable's to wait for, before it can clean-up !
Formerly Gringoloco
Windows XP Pro sp3 x32
Hmm... maybe I should add a WaitForEXE section. What do you think, John?
As for drag and drop, I think that it is quite plausible that it could be used in more than one application, and have something like ProgramExecutableWhenParameters.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I'd agree on both, as long as they are relatively simple adds.
Sometimes, the impossible can become possible, if you're awesome!
Remember the code I wrote earlier to handle WaitForEXE? I remember it had an issue or two (primarily that it would fail on restarting processes), but I could probably get those worked out pretty quickly. Luckily, I have Notepad++ on my USB stick so I can work on that even though my laptop's out of action.
Want me to update that code?
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
I've got a simpler way of doing it now, along slightly different lines, which won't suffer from that problem.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I'm curious as to how you'll do it. Mind sharing the details?
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
I'll share the code.
Format: [Launch]:WaitForEXEN values (thus plain WaitForEXE becomes invalid).
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I take it
${|}
is a statement end, much like{
and}
in C++?"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
${|} is the way of specifying a delimiter with LogicLib; literally, it's a single quote:
It's part of the single-line IfThen structure, making it so that the code inside comes as one argument rather than lots which is untenable with macros, so that it can be then used verbatim. It'd be perfectly valid to do something like
${IfThen} ${Errors} "StrCpy $0 $1"
... but you wouldn't get syntax highlighting that way in any editors.I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I've now added both. You can use ProgramExecutableWhenParameters and WaitForEXEN with the hg repo.
(Both were simple, especially the first, where it was turning:
Into:
)
Unfortunately this has put me a little behind schedule and so I don't think I'm going to manage a release today. Just got a bit more polish to do. I might make it (I've got a bit under three quarters of an hour; if it's not up by then you'll know you need to wait until at least tomorrow).
Edit: not going to manage a release; primary reason: too many release notes to write in ten minutes. If you feel like going through the changesets in the hg repo and constructing release notes for me detailing all changes, please do.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Cool, that's working nice ! I'll do my next release with this!
I'm having a look around to do some more PA's with PAL, so it can be fully tested.
Formerly Gringoloco
Windows XP Pro sp3 x32
But please, do not let me put you of your next release! It can probably wait for next time, and I can pull the fixes of mercurial anyway !
1. What about implementing the NewTextReplace plugin, so we are able to update utf-16 files as well. Anyway this is the plugin which is used in UnicodeNsisPortable(but there it's named TextReplace.dll for compatibility). But it could wait till you're using unicode to compile.
2. What about appending a registry file, at the moment I got to do it this way:
3. Shouldn't [DirectoriesCleanupForce] first backup it self, so keys couldn't accidentally be deleted from the host.
4. About the services, I'm trying mp3gain-win-full-1_2_5.zip, the launcher seems to register the service, but on exit the launcher goes into a heavy loop.
This is what my PAL ini looks like:
This is what I implemented in my regular launcher, and didn't give problems.
[edit: for your info, the loop is before any registry keys and the service gets cleanup]
Formerly Gringoloco
Windows XP Pro sp3 x32
Sorry if I shouldn't post in this forum.
But it's the first time I take a look at "what PortableApps.com Launcher may look like" and it looks very powerfull (service managment ?) and understandable (ini based).
Good luck and thank you
Just ported SharpDevelop to Beta 4, and now I'm getting weird drive letter replacement behavior again. For example, in my default settings, I have the project path set to P:\Documents\Projects, with the LastDrive in DefaultData set to P:. However, when I run SD the first time, the path gets changed to this oddity:
P:L:\DocumentsL:\SharpDevelop Projects
My launcher.ini:
Also, the find/replace scheme seems like it would break if DefaultData contains default settings but no AppPortableSettings.ini--just like my HxD bug from a while back. DriveLetterUpdate was a better scheme, IMO.
Are you using the hg version? I realised what I'd done just after the last release and fixed it immediately (so that the "letter" becomes NONE, i.e. %PAL:LastDrive% = NONE:).
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
I was using Alpha 4. Still, there's the chance the string "NONE:" could legitimately occur in a DefaultData file, and this would cause errors. I still stand by my assertion that FileDriveLetterUpdate was better. If there's no last drive, then no substitution should be attempted at all; unfortunately find-and-replace is unconditional.
the cow jumped over the moon:"?
I had wondered whether I should just do a quick string find for
%PAL:LastDrive
inFind
, think I will now.Find/replace is better... you couldn't find/replace file:///X/ with the old solution but you can now...
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
No you can't--
%PAL:Drive%
and%PAL:LastDrive%
both contain a colon. Unless that was a typo and you meant file:///X:/, in which case that would already have been picked up by ForwardSlashN.I do have to concede that false positives are possible in both cases, however. I'm just not sure search-and-replace gains me anything for the extra lines I need in launcher.ini.
That's why I added
PAL:DriveLetter
. I didn't mean file:///X:/ Also, it's feasible that X:/ could be used in a file in a way that you don't want to replace, and you only want to replace it when it's got file:/// in front. Also there can be other messy situations. The main reason I added the *Letter variants was Eclipse Portable - it escapes the : with a \, and so it needs to use%PAL:DriveLetter%\:
(I've been wondering about scrapping PAL:Drive but don't really think I need to).Part of the reason I switched from the old way was that the ForwardSlashN and BackslashN method was just ugly. This is a much nicer-looking, pure solution. (Possibly even better would be naming the INI section "File Write N" rather than "FileWriteN"...)
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
CamelCase is the de facto standard for INI sections and value names. Putting spaces in it might confuse the Windows INI parser too, but I'm not sure. Either way the spaces would make it uglier (IMO), not cleaner.
I can definitely tell you're a perfectionist, but don't try to make it too perfect, or PAL will never get out of alpha.
One thing I'm curious about though: What program uses file:///X/? I've never seen a file URL without a colon after the drive letter. Certainly no browser will recognize such a path.
John and I are very similar in that trait...
Never fear though, you'll find this in Beta fairly soon now.
file:///X/ has been used in the past by Firefox; now I believe they've accepted the : and use it everywhere. A : in the URL used to seem evil though. Anyway, It was just an example
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
e: ? in file:///e:/
Its in GIMP Portable, was\is in screamer
Too many lonely hearts in the real world
Too many bridges you can burn
Too many tables you can't turn
Don't wanna live my life in the real world
Hi Chris,
I've updated the German.nsh with the new strings.
If I'll time for having a look at mercurail I'll update directly (next time).
Paid for Software more or less?
What You need is OSS!
Just one thing I'd like to verify; the LauncherPathTooLong string was:
"Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürze Sie den Pfad durch die Auslassen einiger über dieser Anwendung liegenden Verzeichnissse oder durch Kürzen der verzeichnisnamen."
You've changed it to
"Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürzen Sie den Pfad durch die Auslassen einiger über dieser Anwendung liegenden Verzeichnissse oder durch Kürzen der Verzeichnisnamen."
There are two differences: you've added an "n" to "verkürze" to make it "verkürzen", and you've made the first letter of the final word ("verzeichnisnamen") capital.
I've committed it to the repository, it even says that you've committed it
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
But I've found another one. Final:
"Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürzen Sie den Pfad durch Auslassen einiger über dieser Anwendung liegenden Verzeichnissse oder durch Kürzen der Verzeichnisnamen."
("die" in front of Auslassen was wrong, but now it's perfect )
Paid for Software more or less?
What You need is OSS!
I don't understand. What should the user do?
And a suggestion (fixes two typos and has a different end):
... hast Du eine bessere Idee? / do You have a better idea?
Thank You for fixing the typos, I found another: "Authentizierung" should be better "Authentifizierung"
Paid for Software more or less?
What You need is OSS!
I know (I've read the english string ;)). At the moment, I don't have a better idea, but the current string looks a bit strange IMO.
(Ich weiß nicht, ob ein unerfahrener Nutzer versteht was gemeint ist bzw. was er machen soll.)
Thanks for fixing the other typo.
Wie wärs mit: "Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürzen Sie den Pfad, indem Sie diese Anwendung woanders hin kopieren oder den Verzeichnisnamen ändern."
Not perfect aber imho besser verständlich.
"What about Love?" - "Overrated. Biochemically no different than eating large quantities of chocolate." - Al Pacino in The Devils Advocate
... but I don't like "woanders hin".
How about:"Der Pfad zu $AppNamePortable ist zu lang. Bitte wählen Sie einen kürzeren Verzeichnisnamen oder einen Installationsordner der weniger Zeichen enthält." ?
Paid for Software more or less?
What You need is OSS!
I didn't like it either.
I'd put the part about the installation folder at the beginning because its more effective (If I have my folder deep enough, changing the folder name wont help me).
Seit wann enthält ein Ordner Zeichen???
What about "installationsordner dessen Pfad kürzer ist"?
You (as a mod) could maybe move all these comments to a new thread as we are kinda hijacking Chris's thread.
"What about Love?" - "Overrated. Biochemically no different than eating large quantities of chocolate." - Al Pacino in The Devils Advocate
how about:
"Der Pfad zu $AppNamePortable ist zu lang. Bitte verkürzen Sie den Pfad ihres Installationsordners". Short and simple.
I don't think that we're hijackers 8)
lets hear markos opinion.
"What about Love?" - "Overrated. Biochemically no different than eating large quantities of chocolate." - Al Pacino in The Devils Advocate
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
(Guess I'm a hijacker now)
to create a thread in Localization Discussion. I thought about it but didn't get round to it... maybe I should and then move your comments to it (a slow task as it involves duplicating each comment manually).
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
So we have the German final:
Paid for Software more or less?
What You need is OSS!
Seems that I forgot the final dot. (LauncherPathTooLong)
So it's more a work in progress than a final.
Your "point" is in.
I also put in one on LauncherAdminError (in English and German) which I'd left out.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Think it's about time for a new release and new thread?
Sometimes, the impossible can become possible, if you're awesome!
I second both motions.
200 comments over 3 pages - it's getting difficult to find newer posts. Definitely time for a new thread.
Plenty of new stuff in Mercurial right now - time for a new release, IMHO.
I'm looking forward to this!
"The question I would like to know, is the Ultimate Question of Life, the Universe and Everything. All we know about it is that the Answer is Forty-two, which is a little aggravating."
I was thinking I should implement your modifications before moving PAL to Beta (and a new thread); however possibly not. The thread is very long already. Currently I think pre-1.0 tasks are:
Oh, and my new documentation.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1
Pages