If 1.8.0 caused missing data in the local tree, this patch gets it
back. For that, the usage of the journal for remote repository is
disabled at the first start.
The problem was that on network error the networkError() and
finishedWithError() signals both fired. To fix it, I collapse all
error handing into a slot triggered by finishedWithError().
I tested the redirection case and the invalid credentials case.
I had a situation here where we were showing stale desktop notifications when a remote folder
errored out and then sync finished with _syncResult data from previous sync.
Since the QLocalServer parent of the QLocalSockets gets destroyed
after the _listeners QList, onLostConnection might try to update
an already destroyed list.
Fix the issue by simply making sure that _localServer is destroyed
first.
Also, use the mirall version for ocsync.
Currently, the csync engine part and the Qt part have different UAs,
and this makes debugging (i.e. reading access logs) difficult. On
top, we haven't increased the ocsync version number in ages. So
as a consequence, I think it would be the best to have ocsync
and the rest share the same version number, and make them identify
with the same user agent.
To ease debugging for our side, we'll still append "(csyncoC)"
for calls made by csync.
For issue #3106
1) Always use the actual timestamp from the file in the file system
to create the conflict file. This is important because if one edit a
file several time, they should have different name. Also it makes more
sens to have the mtime of the modified file.
2) Give the correct size to the job so we know when the temporary file
is complete in case of resuming.
Because file system like FAT only have two second accuracy and would result
in a upload if the mtime in the database is not the same as the one that was
downloaded
Issue #3103
csync_reconcile.c:159:26: warning: address of array 'tmp->path' will always evaluate to 'true' [-Wpointer-bool-conversion]
if( tmp->path ) {
~~ ~~~~~^~~~
csync_file_stat_s::path is an array so it is never null
What was meant here is to check if the string was not empty
In some cryptic cases where the getetag property wasn't returned by
the server, we might be trying to c_strdup a null pointer in
csync_vio_file_stat_copy.
At least avoid crashing in this case by looking for
CSYNC_VIO_FILE_STAT_FIELDS_ETAG, like csync_vio_file_stat_destroy
does.
The default constructor of the iterator points to NULL, which makes
it != end() but invalid to dereference.
Use an integer index instead to keep 0 as a valid default value that
can always correctly be checked against size().
Also make sure that no data is shared between threads by making the
csync_vio_file_stat_t copyable and passing it as const.
Deleting the QLocalSocket while iterating the QList with qDeleteAll
would trigger onLostConnection, which would modify the list mid-air
and leave dangling pointers in it.
Calling save() in the CookieJar destructor was problematic. For instance
we sometimes create a new QNAM with a new CookieJar and then call
setCookieJar() on it to assign some other jar. That destroy the fresh
jar and potentially overwrite cookies.
Also explicitly saving the account's cookies when the account is saved
is more explicit and thus more reliable than counting on the Account
destructor to do it.
This is largely a guess, but this is the only place where we use
a QIODevice to push data through QNAM and that the QIODevice isn't
a direct child of the QNetworkReply.
Fix the issue by making sure that we don't go back to the event loop
and possibly handle network events between the destruction of the
upload QIODevice and the QNetworkReply, which might lead to QNAM
dereferencing a dangling QIODevice pointer.
Make sure that we define NDEBUG in all configurations.
Also remove inconsistent defines:
WIN32: We don't use
_DEBUG;_WINDOWS;_USRDLL: Should be defined by the compiler if necessary
OCCONTEXTMENU_EXPORTS: We currently don't use dllimport anyway
This also update the binary submodule with an updated build.
The QNetworkAccessManager is reset when we are disconnected, just
before attempting to fetch the server's status.php.
This may help fix the problem described in various issues where we
get 'Connection closed' or timeout errors after the OS has woken
from sleep.
Since each new connection to the socket API would trigger a broadcast
of REGISTER_PATH to all existing connections, opening the context menu
would trigger a SHChangeNotify call of the root directory through
the overlay icon extension, which is currently also connected to the
socket API, waiting for changes.
Fix the issue by sending the initial REGISTER_PATH automatic response
only to the connecting socket.
This moves the crash handler installation during the OCC::Application
contruction. This still leaves a window where crashes wouldn't be
caught, leaving the QtSingleApplication and theme initialization
code unreported, but isn't requiring any refactoring for now.
Issue #2952
It was not emitted when a removed folder finished its sync,
and that left the UI in an old state sometimes.
Removing the Folder explicitly is unnecessary as a QSignalMapper
will automatically remove mappings for deleted QObjects.
The config currently only disable the reporter, but still leaves
the crash handler installed on startup. This causes conflicts
when running those builds in lldb.
Work around the issue by requiring the crash reporter to be
disabled in the settings before owncloud can be run in lldb.
This has the negative side-effect of not covering the
initial ConfigFile loading with the crash handler.
Issue #2946
If a file or directory is shared without resharing permission, the
share dialog displays an error. This is not the optimal solution, but
best for now, as we do not have the permissions available for the file
manager plugin.
This fixes#2923
- Check the share checkbox automatically on open of the dialog
- Use the date picker with popping up calendar
- Proper initial size
- no resizing and appearing and disappearing.
Fixes probably #2917, also #2764
This attempts to replicate what i686-w64-mingw32-gen_sym_files
is doing for us with MinGW by parsing the output of otool -L
to get the library name actually used by the executable.
If the password or user was wrong during setup, the client showed a
ConnectionClosed error instead of a proper Username or password wrong
message. This was because in HTTPCredentials::slotAuthentication, the
reply is closed, and a property is set to indicate the auth problem.
This patch now checks at all occurences of networkErrors if it might
have been an authentication problem, and displays something useful.
There is a good chance that this is a sufficient fix for
owncloud/enterprise#556
Import a fix from libcrashreporter-qt that should remove
usage of symbols not available in XP's msvcrt.dll
This should help solving #2907 with the crash reporter enabled.
In order to initiate the conneciton, we should not send a GET on the
webdav URL because that is not a valid webdav command on a collection.
Issue #2911
QNetworkReply::OperationCanceledError may be both because of anthentication
error (because the HTTPCredentials abort the reply) or because of a timeout
(the timer abort the reply). We should only ask for the password if the
reply was canceled because the password was wrong.
QFileInfo has to be refreshed if the underlying file has been
modified in between. That is dangerous so ckamm and me decided
to eliminate the QFileInfo based implementations.
This was triggered by a bug that the client uploaded files that
it should not have.
sendMessage would only be called if there were options to
be sent to the running application.
Fix the issue by having explicitly named messages and always
send the show settings message.
Issue #2374
There is a race condition that can initialize the RemotePathChecker
instance concurrently on the same address and cause a crash when locking
the mutex. The reason is that local static initialization is not
thread-safe with MSVC2013.
Fix the issue by using call_once to initialize a static unique_ptr
instead.
This could be related to some reports of issue #2836.
The same file is on the two sync trees under different names in case of a rename
We must therefore use the rename target as the key in the _syncItemMap to ensure
that the trees are correctly merged.
Also use the same UTF-8 decoding for the target than for the actual file in order
to catch invalid utf-8 in the rename target
CMake is using "c++" as the compiler and the clang detection fails.
Since we require C++11 at this point, enable it in all cases.
Removed the MSVC todos since we don't plan supporting it yet.
The compilation error was
account.h:140:113: error: expected ')'
const QList< QPair<QString, QString> > &queryItems = QList< QPair<QString, QString> >());
^
followed by more errors.
The problem is because the compiler has hard time disambiguiating the comma
int foo(const QPair<int, int> &p = QPair<int, int>());
^
It is indeed quite hard for the compiler to know if this comma is a separation
between complate arguments or the separation between arguments of the functions.
Use the C++11 construct instead which does not need commas
50ms is sometimes not enough when the client is busy synchronizing.
Wait up to 500ms for the client to answer before we give up and show an
empty menu title.
Ideally we should request the title before the watched directory list, but
the list is currently sent implicitly on connect.
The context menu will now show "Share with ownCloud" instead of "Share" as
it does on other platforms.
This also updates the submodule to point to matching binaries.
The problem occurs because of the sorting of items when we have things like
bigfolder
bigfolder/bigsubfolder
bigfolder-2
Then, because dashes come before slash in ascii, the bigfolder-2 would come before its content
and the propagator would thinkg bigfolder is empty and save the etag before it is processed
Should fix issue #2832
That makes it defaulting to the APPLICATION_NAME which is ownCloud.
That is what we want and expect to read the system exclude file from
on linux.
How we find the system exclude file linux:
ConfigFile::excludeFileFromSystem()
-> Theme::instance()->appName()
-> OwncloudTheme::appName() returns "ownCloud"
-> default Theme::appName() returns APPLICATION_SHORTNAME
-> cmake installs to ${SYSCONFDIR}/${APPLICATION_SHORTNAME}
It seems like verclsid.exe hangs on our class IDs when invoked
through explorer.exe for 5-10 seconds. It doesn't hang if I
invoke the same command line from cmd.exe, so there could be some
process parameters that don't play well with our extra thread
or to the pipe connection that we do in it.
Delay creating the RemotePathChecker thread until the first
IsMemberOf call. verclsid.exe only seems to instantiate a object
of each registered class, without actually using them, so we
can use this as a workaround.
This should be fixing issue #2680.
* Fix various spaces vs tabs issues
* Rewrite
- to use instance variables consistently
- to not make shared state explicit instead of relying on
class variables of a common base
* Fix reconnecting to an oC client.
Occasionally on Windows ~DiscoveryMainThread() triggered a crash.
Probably because the QMutableLinkedListIterator was destroyed after
it's underlying data had been removed (from the map).
Cleaning up the map and lists was redundant anyway, so the
destructor is changed to only explicitly destroy the vio_file_stat
objects.
The _listeners list is destroyed before the _localServer.
And since _localServer is the parent of all generated QLocalSockets,
they get destroyed in turn - which triggers onLostConnection() and
thus accessed the destroyed _listeners list.
To avoid that, delete all active QLocalSockets in SocketApi before
its members are destructed.
We also now delete sockets when we're done with them. I think
disconnected sockets would otherwise linger until SocketApi destruction.
It make jenkins fail with the error:
CMake Error at CMakeLists.txt:3 (cmake_policy):
Policy "CMP0020" is not known to this version of CMake.
This reverts commit 6d380c8548.
Usefull when the folder does not exist (for example in case the theme
has a defaultServerFolder that does not yet exist, #2788)
But also to avoid confusion (issue #2663)
This crash was uncovered when testing parallel chunks when one chunk
finished the upload. The propagate was then finished with the other
UploadDevices still being in-flight in the QNAM.
There could be a race condition if the file was updated on the server
between the discovery and the propagate phase. By taking the mtime from
the server, we make sure that we do not have a race.
This is tested by t6.pl with BIG3.file because the script was modifying
the file between the two phases
We need to add the davPath in there.
Otherwise there will be a redirect which will break shiboleth
(We want to only enter the password once)
Issue #2739 and #2780
Windows finds DLLs using PATH or the directory of the process'
executable. By outputing those dependend DLLs together with
owncloud.exe, the developer only need to have OpenSSL's bin
and the qtkeychain build directory in his PATH to let the
dynamic linker find them.
As the documentation of RUNTIME_OUTPUT_DIRECTORY points out,
this only affects windows as other platforms don't consider
libraries as runtime targets.
- qtkeychain isn't necessarily in a qt5keychain subdirectory.
- Explicitly add OpenSSL to the include directories
- Make sure that the USE_OUR_OWN_SQLITE3 code is initialized
for csync by calling find_package.
Since Qt5.4, on release build, qDebug do not provide anymore the line
number unless we define QT_MESSAGELOGCONTEXT
Also define QT_USE_QSTRINGBUILDER while i'm on it (free optimisation)
When connecting to a https:// URL fails, present the user with three
choices:
* Try again with a http:// URL
* Configure client-side TLS certificates
* Go back and enter a different URL
This allows users connecting with an ownCloud server secured with
client-side TLS certificates to start the certificate import wizard
manually instead of relying on a custom server error message.
Otherwise we run into "can't upload because it's too recent" issues
when the folder watcher triggers a sync.
We used to do this, but my recent refactoring started counting the
time since the last sync against this minimum delay, leading to
1ms delays in practice. This fixes the regression.
To make the Sharedialog a bit cleaner and to only have the logic in one place.
The postdata is now passed as a QList<QPair<QString, QString>> to the
OcsShareJob.
* removed broken QSsl::SslV3 default
* rewrote slotHandleErrors(): no longer claim errors which are none.
* hack reverted: lib64 was not the cause for NixOS issues related to libraries.
* refactored csync/src/csync_owncloud.c and discovered+fixed why the dav_connect was never getting the certPath+certPassoword
* cleanup of code but seems this crushed the ssl client certificate support
* fixes the https://github.com/owncloud/client/issues/69#issuecomment-69358377 issue
* lots of cleanup
* From TODO list : translate all french comments into english
* changed _pemCertificate type from QString to QByteArray
- Some dialog changes: Made it less vertical space comsuming
- Some variable cleanups
- Allow to share files that are not within the synced dir by
copying them to the root of a sync dir first.
The server generates a new share when a password is set/deleted so we need to
refetch the shares once that is done.
It is not possible to set an expiration date in the past for a share. So do not
allow the user to select a date in the past.
There are several reason why start==0
* The Content-Range header was not present
* We can't parse it
* Or it is actually 0
If we can't parse it, we cannot assume anything and must error out.
So only in the first case we should discard the temporary file and continue.
Issue #2708
We must not use the SI units if we use power of 2
I believe that we should use SI units and power of 10
But since the server still use power of 2, we need to show the same numbers
But at least we use the proper standard IEC unit that are explicit
The password field now show correct info when a password is entered etc.
Maybe we should have an extra info part where we state that the user needs to
press enter to submit the password
This is a merge from the movie in the original commit (which was local) to the
QProgressIndicator. However, on all connections I tested it, it did not add
much since the API is in gernal pretty quick. So maybe we can just remove this.
This should solve #2675 and #1981
By preloading the chunks in memory before sending them, we don't keep the
file open and therefore we let other program open the file for writing.
If the file is modified between two chunks, we detect that and abort anyway
The server is slow to process each chunk. As a result the time between
the chunks is not neglectible. Therefore we gain a lot of time by
uploading the chunks in parallel. So the bandwitdh is used when the
server is waiting between chunks.
Basically the same functionality as for user sharing. Maybe it would be wise to
merge the two functionalities. Should be rather straight forward if we also
merge the UI parts.
This commit needs a lot of cleaning up. And a lot of error checking needs to be
added. However it is now possible to change and add new shares with users.
Sharing with groups should be just copy paste.
Also the UI needs some love.
The wizard code used to call hide() on hardcoded wizards.
This means that for a brief moment, the first page with the URL
(disabled line edit) may be seen. I think that's completely
legitimate from a feedback perspective. The alternative would
be to unhide on error, but this is rather unelegant...
... instead of uploading the file with replacement character, and asserting
on the next sync.
Issue #2649
If the file or folder on the file system has a name with invalid UTF-8,
We would convert the name to utf-8, and the conversion would result in
replacement character placeholder. And we would upload that file on the server
with that name, and save it with this name on the database.
Fix this issue by showing an error to the user for invalid files.
We are using a QHash to store all the folder objects. This does not allow for
easy sorting and looks weird to the user. Now they are first inserted into a
temp QMap to sort them properly.
* When folder config is used, other folder definitions are always
removed.
* Fix a bug with the wizard becoming stuck when 'skip folder config'
is used.
* Use a shared pointer to Account everywhere to ensure
the instance stays alive long enough for a sync to terminate
* Folder is now tied to an AccountState
* SyncEngine and OwncloudPropagator tie to an Account and use that
for all jobs they run
Issue: Since the setup wizard currently always replaces the
account, it will always wipe all folder definitions, even when
the actual changes to the account were minor.
This allows all the account state information to live in gui
while the sync-relevant data stays in libsync.
I also moved quotainfo to gui since it depends on the account state.
The server might support resuming, so don't always erase the temporary file
and pass the startSize, so the temporary file will be remove if the server
does not support it after all (because it is not sending the "bytes" header
Also pass the expected etag for consistency even if it's not used in this case.
The account state is now managed mostly by the Account itself
instead of through Application. The gui can still control whether
an account is signed out or not.
I just wanted to fix the warning:
QObject::connect: No such slot OCC::SettingsDialog::slotUpdateAccountIcon(QIcon) in settingsdialog.cpp:108
It turns out we don't need anymore the signal or any of the code that
was updating the account icon in the settings dialog since it we now have a fixed icon
* Stop the quota job from having an effect on account status
as it can sometimes take a long time to reply. See #2485 and
owncloud/core#12744.
* Instead of indirectly using the quota job, use the connection
validator to regularly ping the server with a basic PROPFIND for
'getlastmodified' on /.
This request was usually fast for users even when the quota PROPFIND
was slow.
It also registers and unregisters the shell extensions properly and
forces explorer to reload/unload the DLLs so they can be removed.
This obsoletes #2377.
Fixes#2487Fixes#2377
This fixes mirall#1132
A variable that counts the affected items of the propagator operation
done on a item was added to SyncFileItem. Usually that is 1 because
most operations affect only the item itself. But for removes, the
number can be higher for directories (one remove removes a whole tree).
Some rearrangements were needed.
An url can contains % signs, so if it does, the errors formating was wrong
because of the use of QString::args
Also, the error is in html format, and we need to let the message box know
that, otherwise we will just see <br/>
- move items on top like on Mac OS (right is free for accounts now)
- The account icon no longer reflects the current status (in prep for multi-account)
We need to do a sync even if the etag was empty because we do not know
if this is because the etag really changed or because it was new.
Also, some part of the code rely on this fact to schedule a sync.
The fact that there is two sync with 30 sec at the beginning is not
a big problem, because we also need to do the sync the put the directory
etag in the db.
This reverts commit 1c001ee138.
It was deleting too many cookies.
That function is virtual in Qt5 and is used when adding cookie.
But some Shibboleth have several cookies with the same name, and we need to keep them.
Our implementaiton was meant to delete all the shiboleth cookies when we want to log out
If content-lenght is 0, don't chack it is the size we recieved.
It can be zero when using HTTP chunk encoding.
Also do not remove the temporary file so it can be re-used on the next sync
and ask for a new sync immediatly to re-do the sync.
Fixup the fix to task #2528
We need Qt 5.3.3.
If the compiled qt version is Qt 5 but smaller than Qt 5.3.3, do a runtime
check.
OWNCLOUD_NEW_BANDWIDTH_LIMITING is still there for a special setup in which
we patch Qt with the patches
503 for directories means that the dir is a mounted directory from an
external mount which currently is not available. The directory is
ignored and not traversed into during discovery phase.
https://github.com/owncloud/mirall/issues/2215
As of version 10.10 Yosemite, Mac OS X offers the user the option to use
a dark version of the dock and menu bar. The systray icon was black even
on the dark menu bar, thus rendering it nearly impossible to spot.
Previously when a sync failed, we'd retry very soon (30s) no matter how
often a sync had failed before. After this change we'll retry twice and
then back off to the regular 5min interval.
In e5269a4151 I moved the reset calls to
before the first bindValue() because we didn't consistently reset()
after exec().
However, some queries may keep a lock on the database so it is necessary
to reset() as soon as the data is read. This commit reintroduces these
reset() calls.
There also was a bug in syncjournaldb: in some error conditions the
sql query wasn't reset properly. We now always reset a query before
calling bindValue.
The fix in commit 86d8079 made the detection of changes inside
a directory more robust.
As a result, changes are detected inside a directory, even if the
files that are changed were moved away on the other remote, the algorithm
won't let the directory be removed and the directory will be re-created
Found while investigating #2296
The problem is that we should not remove a directory locally if it contains
modified files.
But the modification time of the directory is not necessarily chaning (so
the instruction of the directory may still be NONE)
We have to move the child_modified test a bit down to be recursive
As described in http://www.sqlite.org/cvstrac/wiki?p=MultiThreading precompiled
statements should not be used across thread borders. However, the reconcile
phase would reuse the statements if defined (it calls statedb function from
a different thread) so it is saver to finalize them at the end of the
update run.
Squashed commit of the following:
commit 4d9b072f560fa171a1390b7c74425614aa20e955
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Tue Oct 14 16:04:02 2014 +0200
Remove useless variable
commit 8e85de0307ec5f31bf3f92a7de793fed7d41c2ea
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Tue Oct 14 16:01:52 2014 +0200
Make Windows Explorer Extension build
commit 8e2942cd9fd32e3af72d60cba0d06bd9d6222a45
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Tue Oct 14 11:39:37 2014 +0200
Fix compilation
commit 0fc0c0e0e0c7e58ad97f62700256c7d1f8c0670b
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Tue Oct 14 11:48:32 2014 +0200
Windows Shell Integration: Try to let the thread notify about changes when there are changes
commit 4a1712b7c03269ca3007f167b8f313ea47655967
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Tue Oct 14 11:35:20 2014 +0200
Windows Shell Integration: Share the RemotePathChecker amongst all the OCOverlay instances
commit 2d87408e9af5a4d7ab71c460ce606ba1f367c09f
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Mon Oct 13 18:55:15 2014 +0200
Windows Shell Integration: Attempts to wait on multiple objects (WIP)
commit e448e427b6d1561ad7a40d08fc6632f4d2b4ef44
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Mon Oct 13 17:58:02 2014 +0200
Introduce a worker thread
commit 2344407ec0bc1ce173ebbacadcf3992d62d94078
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Mon Oct 13 17:03:47 2014 +0200
Windows Shell Integration: try to keep the socket open using a thread (WIP)
commit ea6d5273ed60d8bc3f1c5d5c6936364d783a1c0f
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Mon Oct 13 15:27:46 2014 +0200
Make Explorer plugin work again with named pipes
This is a temporary hack, which needs more refactoring.
commit 44a3437a44082379efa0078c9afd7b8bbde930de
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Sat Oct 11 07:31:24 2014 +0200
Fix code
commit 123390a0f3516c0078309d7048c6d2acb9293676
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Fri Oct 10 16:29:35 2014 +0200
Windows shell integration: Use named pipe (WIP)
commit 9eea7e2321abeac6b8db0bd85bfce612dbf6bb20
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Wed Oct 1 12:04:13 2014 +0200
Windows Shell Integration: Simplify StringUtil
This fixes a memory leak in CommunicationSocket::ReadLine
This allows to handle the --trust option in owncloudcmd. In the
owncloudcmd subclass of the httpcredentials, we allow to manually trust
the ssl certificate through a command line switch.
It is possible that we have should_update_etag set to true for files
that we also need to propagate. In which case we must not write to the DB
too early as this could cause data loss. (cf: issue #2296)
In the sync engine. Because that makes tha tthe lower_bounds in selective sync works properly.
For example, if both "Test" and "Test Test" are in the list, then "Test/Foo" would match the "Test Test"
because slash is after space
Task #2289
* If a 416 is returned and we used a Range header, try again
from scratch.
* The direct URL logic was also inconsistent for resumed downloads:
it sent the Range header but didn't check the returned
Content-Range header correctly. Now resuming is disabled for
direct URL downloads.
If lastEtag was null, a force sync was triggered. Force syncs
don't update the etag. The etag retrieval job would only run if
lastEtag was not null. So it could never become non-null.
Use the right check to determine whether a file has a blacklist entry,
SyncFileItem::FileIgnored was incorrect because that denotes files from
the ignore list or blacklisted files with no retries left.
The blacklistedInDb flag does the right thing. Rename it to
hasBlacklistEntry to be more explicit.
The server keeps the mtime and etag anyway.
And changing the mtime also changes the etag and so make other clients re-download
the file instead of detecting the move
By enabling ARC for GCDAsyncSocket (as we should have done before
https://github.com/robbiehanson/CocoaAsyncSocket/wiki/ARC) there
is no chance anymore for a situation where the to-be-written NSData*
is deleted before the socket has had a chance to write it.
Interestingly, this only happened after switching to local sockets,
probably because of how immediatly the NSData* would be sent.
This commit also keeps the debug symbols for the Finder plugin.
The server keeps the mtime and etag anyway.
And changing the mtime also changes the etag and so make other clients re-download
the file instead of detecting the move
The SocketAPI sends status updates for files without being asked for.
And in order to not draw the emblem again if it had not changed, the
state is compared before calling add_emblem
In case it is not allowed to create files or dirs because of missing
permissions in shares, the socket API has to report an error state
rather than the NEW state.
As discussed in mirall issue #1931
A top level shared dir can always be removed on the client, even if it is
read only shared. In that case, the removal means "unsharing". Fixed the
permission check accordingly.
See bug #1918 for more information.
Issue #1385
When renaming, we would normaly already have an error if the file already exist.
And we want to allow the renaming to chang ethe case (Eg. "hello" -> "HELLO"
Before, 0 was used to indicate the sync start which wipes the activity
window. However, if there _are_ no synced items but only ignored items
the overall counter stays zero which wipes the list all the time.
This fixes bug #2171
In some owncloud server setups multiple concurrent connections for the
same session are not supported: owncloud/core#11153
This causes issues with multiple uploads and downloads. A usual symptom
is the quota job failing and the sync aborting.
This workaround lets activity on the propagator's GET and PUT jobs
reset the timeout of all network jobs. That way, queries like the quota
job would not time out while a large up/download is in progress.
The real bug in #2219 actually was that the gui allowed users to
choose to not sync the root folder. That's not supported and no
longer possible in the UI.
Instead you may now sync a folder's files without syncing its sub-
folders.
See #2167 and #2169.
* csync_detect_update: Reupload a file if the sizes differ, similar
to how we reupload if the mtimes differ.
* PropagateUploadFileQNAM::slotPutFinished(): Abort an upload if the
size changed, similar to how we abort an upload if the mtimes changed.
The problem was that the backup function failed as we tried to
move /home/xxx/ownCloud/ to /home/xxx/ownCloud/.oC_bak
The intention was to move it to /home/xxx/ownCloud.oC_bak
Issue #1989
The client (in this case mirall) tells the Finder plugin where to get the icons.
This enables installation in different locations and in branded clients.
The apple build was broken because the elseif in the CMakeLists is never triggered.
Some code was not properly adapted for the new qtmacgoodies.
Some paths were not adapted to new split.
Re-retrieve all icons for a path in case we receive UPDATE_VIEW.
(But in contrast to previous code, don't delete the icons which then
would have caused screen flickering)
* Downloadinfo entries for files that no longer need to be downloaded
are useless and can be removed. In particular, the temporary files
holding partially retrieved files are now deleted when no longer
necessary.
* The same is true for blacklist entries for paths that are no longer
being discovered.
* Same for uploadinfos for files that no longer need to be uploaded.
On signout, syncs that are running in folders are aborted. That used to
also switch the state of these folders to 'paused'. To fix that, aborts
that are caused by user actions no longer change the folder paused
state.
Aborts due to errors should still pause folders! Otherwise we'd try
resyncing them even though there was an error.
Syncing without the system exclude file would cause lots of trouble.
For instance we would try uploading the temporary files we store
partially completed downloads in.
The installation fails because of these:
TabError: inconsistent use of tabs and spaces in indentation
SyntaxError: Missing parentheses in call to 'print'
Otherwise, method unloadFolder can not do important frees.
This is one part of the fix for #2073 because now the socketapi will
send the UNREGISTER_PATH message over the socket.
Handle problems which happen because of pausing the sync as soft errors
rather than normal errors which are blacklisted and displayed in the
gui.
This fixes bug #1959
Otherwise, if the account is signed out and opens the credential popup,
there is a wrong icon displayed. If the account is coming from keychain
this icon is quickly overwritten.
With that , make the status model aware of the account connection state.
With that, we can grey out the correct state icon if the account is not
connected and display the normal icon if the account is connected.
Remove the setSyncEnabled() call to individual folders which mistakenly
set the folders to pause. Let the folders keep their pause state on their
own.
If FolderMan is set to be enabled emit a general refresh signal rather
than one for each folder.
Previously, in folder and folderman there have been the syncEnabled
properties, but they confused the semantics: While in FolderMan the
syncEnabled flag represents the network connection and stuff, in
Folder it represented if the user paused or resumed the folder.
This resulted in mixed use of both, which lead to wrong icon states.
This patch renames the folder methods and properties to isPaused to
make more clear about what it is.
Add another index on the pathlen column. Use that column to deselect
all rows that are shorter than the path to search files below. That
shrinks the amount of rows to examine using LIKE tremendously by
a cheaply to query for criteria.
The connect in SocketAPI had to be moved because it also uses
FolderMan::instance(). And since SocketAPI is instanciated in
FolderMans constructor, this was a deadlock.
Now the connect is tried on every new socket connection in SocketAPI
but I assume that multiple attempts to connect are not an issue.
It is not enough to only implement it for the QNAM returned
by the ShibbolethCredentials, because we sometimes need it
when we have no valid credentials set (and are using dummy
credentials in the course). The main use case is the
Webview opened by Shibboleth for FBA.
But as a side-effect, we can use it to handle auth requests
from the updater and other places.
The fields varialbe should contain or'ed flags of the fields set
in the csync_vio_file_stat_t struct. The problem was that the field
for CSYNC_VIO_FILE_STAT_FIELDS_PERM was assigned rather than or'ed
which makes the release function for the struct not freeing the
etag memory => memleak.
When recovering from a inalid move operation, we call
avoidReadFromDbOnNextSync. This will remove the fileid from the db so
we don't detect a move on the next sync. But we want the next sync to fetch
the file id again, and this can only happen if we don't read them
from the db and do the actual PROPFIND, this is done by avoidReadFromDbOnNextSync
However, if there is propagation in that source directory later, it
will overide the invalid etag with the real one and we will not uissue the PROPFIND
to fetch the fileid.
We must therefore also protect the future write to the DB when calling
avoidReadFromDbOnNextSync
With UPDATE_VIEW the plugin gets notified to update the overlays.
It invalidates the entries in the file icon cache for the path
that comes with the UPDATE_VIEW and than refreshes the view.
It is called automatically by QWizard and do not need to be called explicitly
But setVisibla(false) don't really have an effect there since show() is going
to be called on the page
When the url do not have a path (for example: "http://example.com" as
opposed to "http://example.com/"), its path is not a prefix of the
root path of the cookie (usually '/')
By adding the dav path, we make sure the URL has a path.
This made a bug when the owncloud url was just a domain name and did not
have a path
Some PUT, may take a long time on the server to process (for example, the
last chunk). It may take more time that the timeout.
So in that case the server may reply with an url that we can poll for the etag
This patch is still work in progress
Otherwise the buffer might fill up too quickly and get too large and consume
too much memory which could lead to crash in extreme cases
Should fix issue #1974
The fields varialbe should contain or'ed flags of the fields set
in the csync_vio_file_stat_t struct. The problem was that the field
for CSYNC_VIO_FILE_STAT_FIELDS_PERM was assigned rather than or'ed
which makes the release function for the struct not freeing the
etag memory => memleak.
When using the "Limit automatically" limit, we wait for 25% of the time
it took to upload something.
However, if we go to sleep while uploading, the time it took to upload may take
days. And waiting for 25% of a day is too long.
So never wait for more than 10 seconds
This may be related to issue #1880
If the local folder changes, the sync has to be reinitialized as
well. Until now we did not detect that, which led to the case that
the sync folder was not reinitialized in case only the local folder
changed in the setup dialog.
Before, we would only detect it if all the files were removed, and no
file where added or changed. This may not be enough because there might
be a welcome.txt file. Now, we check that none of the file stays the same,
and some files are removed.
Relates issue #1948
We can't call csync_set_userdata in owncloudcmd because it is
going to be overwritten later in the SyncEngine.
So we had an object of type SyncEngine* that we cast to CmdOptions*
and the trust flag was in the padding, so was some random data.
Therefore we must use global variables in that case in order to
know if we should ignore the certificate.
That macro is new in Qt5, define it as well when compiling with Qt4
so we can use it in mirall
Note: QNetworkCookieJar::deleteCookie was not existing in Qt4.
Headers need not to be added if they are not going to be installed
The list was incomplete anyway, and most of the _HEADERS variables
were even not used
Those class are maintaining the folder for the mirall configuration
They are not usefull in command line clients
Also the FolderWatcher is only used by the folder and not used by the
command line clients
Earlier clients used QtKeychain without a QSettings object, which made
QtKeychain to write the password encrypted into a settings default
location, ie. the registry under windows.
If we can not find a password at the new location it is tried to read
the password from the old default location once. That makes people
happy in migration scenarios.
We decided that we never want to rename a directory behind the
back of the user as the user may be using files in the directory
during the sync.
If moving is not allowed, we just erase the inode form the database so
the next sync will try to do an upload and delete and recover from there
using normal resolution.
This also add some code to update the inode back to the db when it is detected
as changed.
The mutex is not shared with any thread, so it is totaly useless.
Yes: there are possible races here. (with the account, but also with the
user and password)
In order to avoid the warning
warning: anonymous variadic macros were introduced in C99
Due to the use of variadic macro in the qDebug macro in Qt 5.3
C++11 requires a space between string literal and macro to avoid the
ambiguity with user defined litteral
That reads the credentials from the mirall config file if it was not
defined on the command line. Moreover, the connection is validated
before, which sets up the credentials properly.
While uploading a new folder, if the folder is renamed on the server
when still uploading, the result will be that the files that are already
uploaded will end up in the new filder name, but the file that were
not still are in the old folder.
After renaming, all the new uploads wil fail with an error on this sync
because the parent directory don't exist.
But they were uploaded with the old name in the next sync because
the renaming was not detected because the file id was not in the DB
Fix the problem by fetching the file id always when creating a new
directory, on the next sync, and saving it in the database ummediatly
https://github.com/owncloud/enterprise/issues/191
The current code only update the permissions in the DB when
the permission becomes non-empty.
Now we update the permission each time they change.
That way the code is the same for file id and permission so it is
simpler.
To distinguish no permission present to nothing is allowed.
That was the intention of the old code but it did not work as
the first if was always taken
Since remotePerm from csync is never NULL (as it is a buffer),
we consider that if it is empty, there was no permission set
(and therefore everything is allowed)
csync will put a space in the permission if any permission was set
If the result of a restored directory is SoftError, this prevent
to sync the rest of the directory
Therefore, we introduced a new status Restored, which means that
the job was a success, but is a restoration and therefore should be
seen as a warning
when the instruction is NONE, we may return from this function
before having registered the permission in the SyncEngine::_remotePerms
hash.
Move the code a bit up.
If we don't have the cookie in the keychain (e.g. the keychain is
unavailable) but there is still session cookie in the cookie jar,
showing the browser won't ask for authentication.
parseCookies did not work as expected. Now we just hard-set the
token credentials into the Cookie header for QNAM jobs.
This is the same behaviour as for neon jobs.
(cherry picked from commit 855a8c0a335f76b82b8e647a8c5a4ae692065d3b)
The legacy job might still need the neon session and the propagator.
We need to make sure the thread exits before.
This fixes crash when pausing a sync made with the legacy jobs
(for example when there is network limitation)
This should fix https://github.com/owncloud/enterprise/issues/200
If the Folder::Map object is kept locally in the wizard, changes to
the map are not reflected there, as they happen when signing out.
This fixes bug #1875
Direcotries are removed at the end, and we don't want to update
parent directory etag before the delete is performed, or the next
sync may read from db and think the files are not removed.
Issue #1845
When we detect a precondition failed, it is possible that it is
because the etag in the database is wrong. We must therefore not
read from the database on the next sync. In order to avoid that, we
reset the etag of parent directories to invalid values
Fixes#1767
Or an url with '#'
Fixes#1838
The problem is a bug fixed in Qt5 now breaks.
In Qt4, QUrl::setPath() did not properly handle path with '#' in them
and QUrl::toString would restitute the '#'.
But csync will blindly do "uri + path" before passing the path to
VIO. because csync_update has no idea that the VIO plugin need special
encoding, the encoding cannot be done there. But csync_owncloud then
encodes the full path. So if the uri contains '#', it must not be already
encoded or there will be two encoding.
The problem was if there was a false conflict: the file has been touched
both on the server and the client.
- etag has changed on the server
- mtime has changed on the server and the client and is the same
- and file size is the same on both the server and the client
This may also happen if the file is uploaded on the server, but the client
looses connection (or crashes) before it get notified of the etag.
In both tree, the instruction is EVAL, but we reduce it to a NONE because
we detected that the conflict is 'false'. Still, we need to update the db
with the new etag. (_should_update_db)
The problem was that we would set the flag on the wrong tree.
This was not a problem when the file was NEW on both side since we checked
for null etag and used the other one then.
We need to compare the other way round and compare only the file name
because our sync directory might be symlinked and then resolve to
another canonical path (but we were only interested in the filename part
anyway)
When we abort, each job currently running may result in a call to finished().
It used to cause a crash because we would unlock the _syncMutex twice
Fixes#1793
This will cause the browser window to open again after it has been told to close
if a network job has run in the background while the browser window was visible.
Fixes#1814
The goal here is that it is going to be destroyed with the application
It need to be destoyed so the folder are destroyed, which is required
for properly finishing the sync while exiting.
It must not be destroyed after the application because the QSQLite plugin
may be already destroyed in that case.
Since the constructor of FolderMan is called earlier, we can't call the
config file too early
fixes 1793
Returns true if the underlying file system is case preserving instead
of case sensitive. That is true for Mac and Windows currently. Only
Linux has a case sensitive file system usually.
- Don't give the settings window an always-on-top hint, or else
sub dialogs will pop-under. Also, people seem to (ab-)use it
as a status monitor... well
- raiseWidget() can only really do one thing: remove the dialog status
from dialogs without a parent due to a bug in Qt. The previous
implementation never really worked. Tested on Mac and Gnome 3 so far.
Fixes#1795
Fixes parts of #1775
The shibboleth implementation no longer maintains its own QNAM.
Instead, MirallAccessManager now holds a custom QNAM implementation
which saves cookies to a file on disk.
This patch also reduces some complexity wrt the browser window,
which used to be deleted via a roundtrip to its callee, which
is not longer required.
Fixes#1764 and Enterprise bug #165
Going forward, AbstractCredentials::getQNAM() could maybe removed entirely.
If a user only builds some parts of the documentation and afterwards
wants to install owncloud-client afterwards via "make install", the
built parts should be installed in any case.
bubbleUpSyncResult is only called from slotSyncFinished, so if _engine
is invalid there, it is also invalid in slotSyncFinished
This reverts commit aee7515d42.
In case two renames are done on the same file/folder very quickly we
lost the information that the second operation was also a rename. That
was because we tried to get the inode value from a stat on the file once
the first rename was finished. But at that point, the file was already
gone because of the second rename.
Now the original inode is kept and written to db in case the file can
not be stat'ed.
This fixes bug #1737
We don't include them in the total amout of files so it should
not be included in the progress either.
Also, for some reasons directories seems to be 16kB on windows
Fixup commit 9193286fc1
Use the right URL for the PROPPATCH and HEAD, do not let other
jobs start when we wait for the UpdateMTimeAndETagJob
Update the etag and the fileid of the real item.
Changed the account settings estimation to display both current file and overwhole estimation.
Decresed the progress font size to fit the added information
This is only used for a very specific server that do not support
changing the extension of files without re-uploading the file.
Since the change is small and self contained, it is guarded by a #ifdef
(Removed old BLACKLIST_ON_ERROR option that is no longer in use)
Before, we would only set up a file system watcher when we read the
config at startup. But we also need to do it in the other case when
the user configure new folder to watch
We can't use the quota job for that as it needs the credidentials and therefore
may re-enter the credidential code when we are currently trying to fetch the credentials.
The quotainfo.cpp part of this patch is basically a revert of d836b80153
We fetch the id from the server, but don't save them in the database.
I Could have used INSTRUCTION_UPDATED for that, but then i would need to update the
reconcile algorithm to take in account the fact that UPDATED is possible there.
Instead, use should_update_etag which means the db is going to be written again
Remove reference to old instruction _UPDATED and _DELETED which does not make sens with
the new propagator
Improve the test to test this case, and that etags are properly writen to the DB
when there is a fake conflict
This can cause the crash because the _engine member is deleted in the
sync finished slot. The solution is to store the stopWatch object
before the engine is destroyed.
Fixes bug #1675
From the Qt 5 documentation:
Note: when porting QDesktopServices::DataLocation(obsolete)
to QStandardPaths::DataLocation, a different path will
be returned.
QDesktopServices::DataLocation was GenericDataLocation
+ "/data/organization/application", while
QStandardPaths::DataLocation is GenericDataLocation
+ "/organization/application".
We'll resort to the deprecated version, since we'll need to fix
data locations to be XDG compliant sooner than later anyway
(currently scheduled for 1.8)
- Use SHA 265 instead of obsolete MD5 where possible (Qt5)
- Remove <tt> formatting: that simply looked ugly
- Wrap SHA 265 hash
- Use spaces as separators
As usual, the default needs to remain ':' separation, because
it's needed to pass valid hashes to csync.
It is required to have all ownCloud system files in the ignore list
that have to be ignored, because the ignore list is fed into the
folderwatcher, which needs to ignore changes to both the journal and
the logfile.
Since the journal is now in the same directory, we don't need this
security anymore
When the directory is removed, the sync will error out saying that the
journal cannot be loaded or created
The commit message say that this line should be necessary to show
the information when the setting dialog is open, but this is working
now via the signals
Those tests are existing on the legacy jobs.
We check there is an etag so we make sure a proxy is not in between.
(We have seen user complaining because their proxy is replacing the
pages with one that says they need to enter their login and password)
Also it is important to check that the etag has not changed if we resume
(this may happen if the file is changed on the server between the update
phase and the propagate phase, and that we resume this file)
We now listen to changes to files and when an event is received we first match
the file name to the "ignored paths list" and only if the the file that was
changed didn't match figure out which directory needs to be synced.
(In french, one may want to add a space before the colon.
Other languages may want to change the order)
Also use the two argument version of arg() to avoid issues if the first
string contains a '%1' sign
Since we removed the vio abstraction, we cannot use the file system anymore
as a remote. and because we unfortunately can't use a real server,
just disable that test.
Renamed owncloudpropagator_qnam to propagator_qnam
Move the jobs in propagatorjobs.cpp
Move the neon jobs that have a qnam equivalent into propagator_legacy.cpp and
rename the jobs accordingly
- Do not start them in parallel, start them in sequence instead, as they are quite
and there are already other jobs running in parallel normaly
- Do not load the fill into memory
- Support resuming
Rationale:
When Qt5 is not found, the script will automatically use Qt4.
However, without this change, when Qt4 is not found, it will not
try to find Qt5 because BUILD_WITH_QT4 is ON by default forbidding the
use of Qt5 even if it is installed.
Also, other packages default to Qt5 including qtkeychain
See also issue #1418
If the etag of a directory hasn't changed, the content for the csync
tree can be restored from database. The code doing that is now optimized
so that this does not take so long any more.
Not yet supported:
- chunking
- if the file changes while uploading
- aborting
- owncloudcmd (because of the dependency to the account and the credidentials)
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Gelditu beharreko ${APPLICATION_EXECUTABLE} prozesua(k) aurkitu dira.$\nNahi duzu instalatzaileak zure partetik hauek gelditzea?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"kill prozesua ez da aurkitu!"
StrCpy$PageReinstall_NEW_Field_1"${APPLICATION_NAME}ren bertsio zaharrago bat instalatuta dago. Aholkatzen da hau desinstalatzea berria instalatu baino lehen. Hautatu nahi duzun aukera eta sakatu Hurrengoa jarraitzeko."
StrCpy$PageReinstall_NEW_Field_2"Desinstalatu instalatu baino lehen"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Hautatu nola nahi duzun ${APPLICATION_NAME} instalatzea."
StrCpy$PageReinstall_OLD_Field_1"${APPLICATION_NAME}ren bertsio berriago bat instalatuta dago! Ez da aholkatzen bertsio zaharrago bat instalatzea. Benetan bertsio zaharrago hau instalatu nahi baduzu, hobe da lehenengo bertsio berria desinstalatzea. Hautatu nahi duzun aukera eta sakatu Hurrengoa jarraitzeko."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} dagoeneko instalatuta dago.\nHautatu zer operazio egin nahi duzu eta klikatu Hurrengoa jarraitzeko."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$PageReinstall_NEW_Field_1"An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Choose the maintenance option to perform."
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Leave unchecked to keep the data folder for later use or check to delete the data folder."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Mostrar les notes de versió"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"S'ha trobat el(s) procés ${APPLICATION_EXECUTABLE} que s'ha d'aturar.$\nVoleu que l'instal·lador l'aturi?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"S'estan matant els processos ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Procés per matar no trobat!"
StrCpy$PageReinstall_NEW_Field_1"Una versió anterior de ${APPLICATION_NAME} està instal·lada en el vostre sistema. Es recomana desinstal·lar la versió actual abans d'instal·lar. Seleccioneu l'operació que desitjeu realitzar i feu clic a Següent per continuar."
StrCpy$PageReinstall_NEW_Field_2"Desinstal·lar abans d'instal·lar"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Trieu la manera com voleu instal·lar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Una versió més recent de ${APPLICATION_NAME} ja està instal.lada!! No es recomana instal.lar una versió més antiga. Si realment voleu instal.lar una versió més antiga, és millor primer desinstal.lar la versió actual. Seleccioni l'operació que desitjeu realitzar i feu clic a Següent per a continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} ja està instal.lat.↩\nSeleccioneu l'operació que desitjeu realitzar i feu clic a Següent per continuar."
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Drecera a l'escrptori per ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Drecera d'inici ràpid per ${APPLICATION_NAME}."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Esborra la carpeta de dades de ${APPLICATION_NAME} del vostre equip."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"Voleu esborrar la carpeta de dades de ${APPLICATION_NAME}?"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Deixeu-ho sense marcar per mantenir la carpeta de dades per un ús posterior o marqueu-ho per esborrar la carpeta de dades."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Sí, esborra la carpeta de dades."
StrCpy$UNINSTALLER_FILE_Detail"Escrivint el desinstal·lador"
StrCpy$UNINSTALLER_REGISTRY_Detail"Escrivint les claus del registre de l'instal·lador"
StrCpy$UNINSTALLER_FINISHED_Detail"Acabat"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Zobrazit poznámky k vydání"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Nalezen proces(y) ${APPLICATION_EXECUTABLE}, které je nutné ukončit .$\nPřejete si, aby je instalátor za vás ukončil?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Proces k ukončení nebyl nalezen! "
StrCpy$PageReinstall_NEW_Field_1"Starší verze ${APPLICATION_NAME} je nainstalována na tomto systému. Doporučuje se předem tuto verzi odinstalovat. Zvolte operaci, kterou chcete uskutečnit, a klikněte na tlačítko Další pro pokračování."
StrCpy$PageReinstall_NEW_Field_2"Odinstalovat před instalací"
StrCpy$INIT_NO_QUICK_LAUNCH"Zástupce rychlého spuštění (není k dispozici)"
StrCpy$INIT_NO_DESKTOP"Zástupce na ploše (přepíše existující)"
StrCpy$UAC_ERROR_ELEVATE"Nelze zvýšit, chyba:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Tento instalátor vyžaduje správcovská oprávnění, opakujte znovu"
StrCpy$INIT_INSTALLER_RUNNING"Instalátor je již spuštěn."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Tento odinstalátor vyžaduje správcovská oprávnění, opakujte znovu"
StrCpy$INIT_UNINSTALLER_RUNNING"Odinstalátor je již spuštěn."
StrCpy$SectionGroup_Shortcuts"Zástupci"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Gevonden ${APPLICATION_EXECUTABLE} proces(sen) moet worden gestopt.$\nWilt u dat het installatieprogramma dat voor u doet?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Het te stoppen proces is niet gevonden!"
StrCpy$PageReinstall_NEW_Field_1"Er is een oudere versie van ${APPLICATION_NAME} geïnstalleerd op uw systeem. geadviseerd wordt om de huidige versie te de-installeren voordat de nieuwe versie wordt geïnstalleerd. Selecteer de uit te voeren actie en klik op Verder om door te gaan."
StrCpy$PageReinstall_NEW_Field_2"De-installeren voor installeren"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Kies hoe u ${APPLICATION_NAME} wilt installeren."
StrCpy$PageReinstall_OLD_Field_1"Er is al een recentere versie van ${APPLICATION_NAME} geïnstalleerd! Installeren van een oudere versie wordt niet aangeraden. Als u echt de oudere versie wilt installeren, adviseren we de huidige versie eerst te verwijderen. Kies de actie die u wilt uitvoeren en druk op Verder om door te gaan."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is al geïnstalleerd.\nKies de actie die u wilt uitvoeren en druk op Verder om door te gaan."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Leitud protsess(id) ${processName} mis tuleks peatada. $\nKas soovid, et installer seiskaks need?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"${APPLICATION_EXECUTABLE} protsessi lõpetamine."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Ei leitud protsessi, mida tappa!"
StrCpy$PageReinstall_NEW_Field_1"Üks vanem versioon ${APPLICATION_NAME} on juba paigaldatud. On soovitav see eemaldada enne uue paigaldamist. Vali tehtav toiming ning kliki Jätka."
StrCpy$PageReinstall_NEW_Field_2"Eemalda enne paigaldamist"
StrCpy$UAC_ERROR_ELEVATE"Ei suuda ülendada õigusi, viga: "
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"See paigaldaja vajab admini ligipääsu, proovi uuesti"
StrCpy$INIT_INSTALLER_RUNNING"Paigaldaja on juba käimas."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"See desinstallija vajab admini ligipääsu, proovi uuesti"
StrCpy$INIT_UNINSTALLER_RUNNING"See desinstallija on juba käimas"
StrCpy$SectionGroup_Shortcuts"Viidad"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"بله، این پوشه داده را حذف کن."
StrCpy$UNINSTALLER_FILE_Detail"نوشتن حذف کننده"
StrCpy$UNINSTALLER_FINISHED_Detail"اتمام"
StrCpy$INIT_INSTALLER_RUNNING"نصاب از قبل در حال اجراست."
StrCpy$INIT_UNINSTALLER_RUNNING"حذف کننده از قبل در حال اجراست."
StrCpy$SectionGroup_Shortcuts"میانبرها"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$PageReinstall_NEW_Field_1"An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_NEW_Field_2"Uninstall before installing"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Choose how you want to install ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Havaittiin sovelluksen ${APPLICATION_EXECUTABLE} prosessi (tai prosesseja) jotka pitäisi pysäyttää.\nHaluatko että asennusohjelma pysäyttää nämä puolestasi?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Tapettavaa prosessia ei löytynyt!"
StrCpy$PageReinstall_NEW_Field_1"Vanhempi versio sovelluksesta ${APPLICATION_NAME} on jo asennettu. On suositeltavaa että poistat vanhan asennuksen ensin. Valitse mikä toiminto suoritetaan ja napsauta Seuraava jatkaaksesi."
StrCpy$PageReinstall_NEW_Field_2"Poista ennen asentamista"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Valitse miten ${APPLICATION_NAME} asennetaan."
StrCpy$PageReinstall_OLD_Field_1"Uudempi versio sovelluksesta ${APPLICATION_NAME} on jo asennettu! Vanhan version asennus ei ole suositeltavaa. Jos todella haluat asentaa vanhemman version, kannattaa poistaa nykyisen version asennus ensin. Valitse minkä toimenpiteen haluat suorittaa ja paina Seuraava jatkaaksesi."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} on jo asennettu.\nValitse suoritettava toimenpide ja napsauta Seuraava jatkaaksesi."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"Haluatko varmasti poistaa ${APPLICATION_NAME}-datakansion?"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Jätä valinta ruksimatta säilyttääksesti datakansion myöhempää käyttöä varten tai täytä ruksi jos haluat poistaa datakansion ja siinä olevat tiedostot."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Kyllä, poista tämä datakansio."
StrCpy$UNINSTALL_MESSAGEBOX"Vaikuttaa siltä että sovellus ${APPLICATION_NAME} on asennettu kansioon '$INSTDIR'.\n\nHaluatko jatkaa tästä huolimatta (ei suositeltavaa)?"
StrCpy$UNINSTALL_ABORT"Poistaminen keskeytettiin käyttäjän toimesta"
StrCpy$UAC_ERROR_ELEVATE"Kohottaminen ei onnistu, virhe:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Tämä asennusohjelma vaatii ylläpitäjän oikeudet, yritä uudelleen."
StrCpy$INIT_INSTALLER_RUNNING"Asennusohjelma on jo käynnissä."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Tämä poisto-ohjelma vaatii ylläpitäjän oikeudet, yritä uudelleen."
StrCpy$INIT_UNINSTALLER_RUNNING"Poisto-ohjelma on jo käynnissä."
StrCpy$SectionGroup_Shortcuts"Pikakuvakkeet"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$PageReinstall_NEW_Field_1"An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Montrer les notes de version"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Les processus à stopper n'ont pas été trouvés."
StrCpy$PageReinstall_NEW_Field_1"Une vieille version de ${APPLICATION_NAME} est installée sur votre système. Il est recommandé que vous désinstalliez cette version avant l'installation. Sélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Afficher les notes de version"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Les processus ${APPLICATION_EXECUTABLE} en cours d’exécution doivent être stoppés avant de poursuivre.$\nVoulez-vous que le programme d’installation s’en charge pour vous ?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Fermeture des processus ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Le processus à stopper n'a pas été trouvé !"
StrCpy$PageReinstall_NEW_Field_1"Une ancienne version de ${APPLICATION_NAME} est installée sur votre système. Il est recommandé de désinstaller cette version avant de continuer. Sélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
StrCpy$PageReinstall_NEW_Field_2"Désinstaller avant d'installer à nouveau"
StrCpy$PageReinstall_NEW_Field_3"Ne pas désinstaller"
StrCpy$PageReinstall_OLD_Field_1"Une version plus récente de ${APPLICATION_NAME} est déjà installée ! Il n'est pas recommandé d'installer une version plus ancienne. Si vous voulez vraiment installer cette version plus ancienne, il est préférable de d'abord désinstaller la version courante. Sélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} est déjà installée.\nSélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} est déjà installé.\nSélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
StrCpy$PageReinstall_SAME_Field_2"Ajouter/Réinstaller des composants"
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Choisir l'option de maintenance à appliquer."
StrCpy$SEC_APPLICATION_DETAILS"Installer les essentiels de ${APPLICATION_NAME}."
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Choisir l'opération de maintenance à effectuer."
StrCpy$SEC_APPLICATION_DETAILS"Installation des essentiels de ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_SHELL_EXT_SECTION"Intégration à l'Explorateur Windows"
StrCpy$OPTION_SECTION_SC_SHELL_EXT_DetailPrint"Installation de l'intégration à l'Explorateur Windows..."
StrCpy$OPTION_SECTION_SC_START_MENU_SECTION"Raccourci programme du menu Démarrer"
StrCpy$OPTION_SECTION_SC_START_MENU_DetailPrint"Ajouter un raccourci pour ${APPLICATION_NAME} au menu Démarrer."
StrCpy$OPTION_SECTION_SC_START_MENU_DetailPrint"Ajout d'un raccourci pour ${APPLICATION_NAME} au menu Démarrer."
StrCpy$OPTION_SECTION_SC_DESKTOP_SECTION"Raccourci Bureau"
StrCpy$OPTION_SECTION_SC_DESKTOP_DetailPrint"Créer un raccourci Bureau"
StrCpy$OPTION_SECTION_SC_DESKTOP_DetailPrint"Création d'un raccourci sur le Bureau"
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_SECTION"Raccourci de lancement rapide"
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint"Créer un raccourci de lancement rapide"
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint"Création d'un raccourci de lancement rapide"
StrCpy$OPTION_SECTION_SC_APPLICATION_Desc"Essentiels de ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_START_MENU_Desc"Raccourci de ${APPLICATION_NAME}"
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Raccourci Bureau de ${APPLICATION_NAME}."
@@ -30,15 +34,13 @@ StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Oui, supprimer ce dossier de données."
StrCpy$UNINSTALLER_FILE_Detail"Écriture du désinstallateur"
StrCpy$UNINSTALLER_REGISTRY_Detail"Écriture des clefs de registre du désinstallateur"
StrCpy$UNINSTALLER_FINISHED_Detail"Terminé"
StrCpy$UNINSTALL_MESSAGEBOX"Il semble que ${APPLICATION_NAME} ne soit pas installée dans le dossier '$INSTDIR'.$\n$\nVoulez-vous poursuivre (non recommandé) ?"
StrCpy$UNINSTALL_MESSAGEBOX"Il semble que ${APPLICATION_NAME} ne soit pas installé dans le dossier '$INSTDIR'.$\n$\nVoulez-vous poursuivre (non recommandé) ?"
StrCpy$UNINSTALL_ABORT"Désinstallation interrompue par l'utilisateur"
StrCpy$INIT_NO_QUICK_LAUNCH"Raccourci de lancement rapide (N/A)"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Cet installateur requiert les droits administrateur, essayez à nouveau"
StrCpy$INIT_INSTALLER_RUNNING"Une installation est déjà en cours."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Ce désinstallateur requiert les droits administrateur, essayez à nouveau"
StrCpy$INIT_UNINSTALLER_RUNNING"Une désinstallation est déjà en cours."
StrCpy$SectionGroup_Shortcuts"Raccourcis"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
@@ -3,7 +3,7 @@ StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Amosar as notas de publicaci
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Atopáronse procesos ${APPLICATION_EXECUTABLE} que teñen que ser detidos.$\nQuere que sexa o instalador quen o(s) deteña?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Matando os procesos ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Non se atopou o proceso para matalo!"
StrCpy$PageReinstall_NEW_Field_1"No seu sistema hai instalada unha versión anterior do ${APPLICATION_NAME}. Recomendámoslle que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
StrCpy$PageReinstall_NEW_Field_1"No seu sistema hai instalada unha versión anterior de ${APPLICATION_NAME}. Recomendámoslle que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
StrCpy$PageReinstall_NEW_Field_2"Desinstalar antes de instalar"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"${APPLICATION_EXECUTABLE} gefundene Prozess(e), die gestoppt werden müssen.$\nWollen Sie, dass der Installer diese nun für Sie stoppt?"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"${APPLICATION_EXECUTABLE} Prozess(e) gefunden, die gestoppt werden müssen.$\nWollen Sie, dass der Installer diese nun für Sie stoppt?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Prozess zum Beenden nicht gefunden!"
StrCpy$PageReinstall_NEW_Field_1"Eine ältere Version von ${APPLICATION_NAME} ist auf Ihrem System installiert. Es wird empfohlen, diese Version zunächst zu entfernen. Wählen Sie unter folgenden Vorgehenweisen und wählen Sie $\"Weiter$\"."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Βρέθηκε η(οι) διεργασία(ες) ${APPLICATION_EXECUTABLE} η(οι) οποία(ες) θα πρέπει να τερματιστεί(ούν).$\nΘα θέλατε να την(τις) τερματίσει ο βοηθός εγκατάστασης για εσάς;"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Δεν βρέθηκε διεργασία για βίαιο τερματισμό!"
StrCpy$PageReinstall_NEW_Field_1"Μια παλαιότερη έκδοση της ${APPLICATION_NAME} είναι εγκατεστημένη στο σύστημά σας. Είναι προτεινόμενο να απεγκαταστήσετε την τρέχουσα έκδοση πριν την εγκατάσταση. Επιλέξτε τη διαδικασία που επιθυμείτε ναπραγματοποιείσετε και πατήστε Επόμενο γιανα συνεχίσετε."
StrCpy$PageReinstall_NEW_Field_1"Μια παλαιότερη έκδοση της ${APPLICATION_NAME} είναι εγκατεστημένη στο σύστημά σας. Είναι προτεινόμενο να απεγκαταστήσετε την τρέχουσα έκδοση πριν την εγκατάσταση. Επιλέξτε τη διαδικασία που επιθυμείτε ναεκτελέσετε και πατήστε Επόμενο γιανα συνεχίσετε."
StrCpy$PageReinstall_NEW_Field_2"Απεγκατάσταση πριν την εγκατάσταση"
StrCpy$PageReinstall_NEW_Field_3"Να μην απεγκατασταθεί"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Επιλέξτε πώς θέλετε να εγκαταστήσετε την ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Μια νεώτερη έκδοση της ${APPLICATION_NAME} είναι ήδη εγκατεστημένη! Δεν συνίσταται να εγκαταστείσετε μια παλαιότερη έκδοση. Εάν θέλετε πραγματικά να εγκαταστήσετε αυτή την παλαιότερη έκδοση, είναι καλύτερο να απεγκαταστήσετε την τρέχουσα έκδοση πρώτα. Επιλέξτε τη διαδικασία που επιθυμείτε ναπραγματοποιείσετε και επιλέξτε Επόμενο γιανα συνεχίσετε."
StrCpy$PageReinstall_SAME_Field_1"Η ${APPLICATION_NAME} ${VERSION} είναι ήδη εγκατεστημένη.\n\nΕπιλέξτε τη διαδικασία που επιθυμείτε ναπραγματοποιείσετε και επιλέξτε Επόμενο γιανα συνεχίσετε."
StrCpy$PageReinstall_OLD_Field_1"Μια νεώτερη έκδοση της ${APPLICATION_NAME} είναι ήδη εγκατεστημένη! Δεν συνίσταται να εγκαταστείσετε μια παλαιότερη έκδοση. Εάν θέλετε πραγματικά να εγκαταστήσετε αυτήν την παλαιότερη έκδοση, είναι καλύτερο να απεγκαταστήσετε την τρέχουσα έκδοση πρώτα. Επιλέξτε τη διαδικασία που επιθυμείτε ναεκτελέσετε και επιλέξτε Επόμενο γιανα συνεχίσετε."
StrCpy$PageReinstall_SAME_Field_1"Η ${APPLICATION_NAME} ${VERSION} είναι ήδη εγκατεστημένη.\n\nΕπιλέξτε τη διαδικασία που επιθυμείτε ναεκτελέσετε και επιλέξτε Επόμενο γιανα συνεχίσετε."
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Συντόμευση στην επιφάνεια εργασίας της "
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Συντόμευση Ταχείας Εκκίνησης της "
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Αφαίρεση του φακέλου δεδομένων της ${APPLICATION_NAME} από τον υπολογιστή σας"
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Συντόμευση επιφάνειας εργασίας της ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Συντόμευση Ταχείας Εκκίνησης της ${APPLICATION_NAME}."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Αφαίρεση του φακέλου δεδομένων της ${APPLICATION_NAME} από τον υπολογιστή σας."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"Θέλετε να αφαιρέσετε τον φάκελο δεδομένων της ${APPLICATION_NAME};"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Αφήστε κενό γιανα διατηρήσετε τον φάκελο δεδομένων για μελλοντική χρήση ή επιλέξτε γιανα διγράψετε το φάκελο δεδομένων."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Να διαγραφεί ο φάκελος δεδομένων."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Ναι, διαγραφή αυτού του φακέλου δεδομένων."
StrCpy$UNINSTALLER_REGISTRY_Detail"Εγγραφή Κλειδιών μητρώου (Registry) της Εφαρμογής Εγκατάστασης"
StrCpy$UNINSTALLER_FINISHED_Detail"Ολοκλήρωση"
StrCpy$UNINSTALL_MESSAGEBOX"Φαίνεται πως η ${APPLICATION_NAME} είναι εγκατεστημένη στον κατάλογο '$INSTDIR'.$\n$\nΣυνέχιση παρ' όλα αυτά (δεν συνίσταται);"
StrCpy$UNINSTALLER_FINISHED_Detail"Ολοκληρώθηκε"
StrCpy$UNINSTALL_MESSAGEBOX"Δεν φαίνεται να είναι εγκατεστημένηη η ${APPLICATION_NAME} στον κατάλογο '$INSTDIR'.$\n$\nΣυνέχιση παρ' όλα αυτά (δεν συνίσταται);"
StrCpy$UNINSTALL_ABORT"Η απεγκατάσταση ματαιώθηκε από το χρήστη"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$INIT_UNINSTALLER_RUNNING"Az eltávolító már fut."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Process to kill not found!"
StrCpy$PageReinstall_NEW_Field_1"An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_NEW_Field_2"Uninstall before installing"
StrCpy$PageReinstall_NEW_Field_3"Do not uninstall"
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Choose the maintenance option to perform."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Mostra le note di rilascio"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Trovati i processi ${APPLICATION_EXECUTABLE} che dovrebbero essere fermati.$\nVuoi che il programma di installazione li fermi per te?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Sto terminando i processi ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Trovati ${APPLICATION_EXECUTABLE} processi che dovrebbero essere fermati.$\nVuoi che il programma di installazione li fermi al posto tuo?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Il processo da terminare non è stato trovato!"
StrCpy$PageReinstall_NEW_Field_1"Una versione più datata di ${APPLICATION_NAME} è installata sul tuo sistema. Si consiglia di disinstallare la versione attuale prima di installare. Seleziona l'operazione da eseguire e fai clic su Avanti per continuare."
StrCpy$PageReinstall_NEW_Field_2"Disinstalla prima di installare"
@@ -14,9 +14,11 @@ StrCpy $PageReinstall_SAME_Field_2 "Aggiungi/Reinstalla i componenti"
StrCpy$UNINSTALL_MESSAGEBOX"Non sembra che ${APPLICATION_NAME} sia installato nella cartella '$INSTDIR'.$\nVuoi continuare comunque (non consigliato)?"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Pokaż informacje o wydaniu"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Proces ${APPLICATION_EXECUTABLE} musi zostać zatrzymany $\nCzy chcesz aby instalator zatrzymał je dla ciebie?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Zamykam proces ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Nie znaleziono procesu!"
StrCpy$PageReinstall_NEW_Field_1"W Twoim systemie jest zainstalowana starsza wersja ${APPLICATION_NAME}. Zalecane jest jej usunięcie przed dalszą instalacją. Wybierz operację którą chcesz wykonać i naciśnij przycisk Dalej."
StrCpy$PageReinstall_NEW_Field_2"Odinstaluj przed instalacja"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Wybierz jak chcesz zainstalować ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Zainstalowana jest nowsza wersja ${APPLICATION_NAME}! Niezalecane jest instalowanie starszej wersji. Jeśli naprawdę chcesz zainstalować starszą wersję lepiej najpierw odinstalować obecną aplikację. Wybierz operację którą chcesz wykonać i naciśnij przycisk Dalej."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} jest już zainstalowany.\nWybierz operację którą chcesz wykonać i naciśnij przycisk Dalej."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Process to kill not found!"
StrCpy$PageReinstall_NEW_Field_1"An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Choose how you want to install ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Choose the maintenance option to perform."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$INIT_UNINSTALLER_RUNNING"The uninstaller is already running."
StrCpy$SectionGroup_Shortcuts"Shortcuts"
StrCpy$UNINSTALL_MESSAGEBOX"Nie wygląda na to że ${APPLICATION_NAME} jest zainstalowane w katalogu '$INSTDIR'.$$ Kontynuować mimo tego (nie zalecane)?"
StrCpy$UNINSTALL_ABORT"Dezinstalacja przerwana przez użytkownika"
StrCpy$INIT_NO_QUICK_LAUNCH"Skrót na Pasku Zadań (NIE DOTYCZY)"
StrCpy$INIT_NO_DESKTOP"Skróty na pulpicie (nadpisuje obecne)"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Mostrar notas de lançamento"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Encontrados ${APPLICATION_EXECUTABLE} processos que precisam de ser parados.$\nDeseja que o instalador os pare ?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Processo para terminar não foi encontrado!"
StrCpy$PageReinstall_NEW_Field_1"Está instalada uma versão anterior de ${APPLICATION_NAME} no seu sistema. Recomenda-se que desinstale primeiro a versão atual antes de instalar. Selecione a operação que pretende fazer, e clique Seguinte para continuar."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Processos(s) ${APPLICATION_EXECUTABLE} em execução. Estes processos precisam de ser interrompidos.$\\nDeseja que o instalador os termine automaticamente?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"A terminar os processos ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Não foi encontrado o processo a terminar!"
StrCpy$PageReinstall_NEW_Field_1"Uma versão antiga de ${APPLICATION_NAME} está instalada no sistema. É recomendado que você desinstale a versão atual antes de instalar. Selecione a operação que deseja executar e clique em $\"Avançar$\" para continuar."
StrCpy$PageReinstall_NEW_Field_2"Desinstalar antes de instalar"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Escolha como pretende instalar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Já esta instalada uma nova versão dfe ${APPLICATION_NAME}! Não se recomenda instalar uma versão anterior. Se quer mesmo instalar esta versão mais antiga, é melhor desinstalar primeiro a versão atual. Selecione a operação que pretende fazer e clique Seguinte para continuar."
StrCpy$PageReinstall_OLD_Field_1"Uma versão mais recente do ${APPLICATION_NAME} já está instalada! Não é recomendada a instalação de uma versão mais antiga. Se realmente deseja instalar esta versão, aconselha-se a desinstalação da versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} já está instalado.\nSelecione a operação que deseja fazer, e clique Seguinte para continuar."
@@ -6,7 +6,7 @@ StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Processo para eliminar n
StrCpy$PageReinstall_NEW_Field_1"Uma versão mais antiga de ${APPLICATION_NAME} está instalado em seu sistema. É recomendado que você desinstale a versão atual antes de instalar. Selecione a operação que deseja executar e clique em Avançar para continuar."
StrCpy$PageReinstall_NEW_Field_2"Desinstalar antes de instalar"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Escolha como você deseja instalar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"A versão mais recente do ${APPLICATION_NAME} já está instalado! Não é recomendado que você instale uma versão mais antiga. Se você realmente deseja instalar esta versão mais antiga, é melhor desinstalar a versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${version} já está instalado. \nSelecione a operação que deseja executar e clique em Avançar para continuar."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Показать примечания к выпуску"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Не найдены процессы, которые нужно завершить!"
StrCpy$PageReinstall_NEW_Field_1"Обнаружена более старая версия ${APPLICATION_NAME}. Рекомендуется удалить её перед установкой. Выберите желаемое действие и нажмите $\"Далее$\"."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Обнаружен процесс ${APPLICATION_EXECUTABLE}, который требуется остановить.$\nВы хотите чтобы программа установки сделала это самостоятельно?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Завершение процессов ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Процессы для завершения не найдены!"
StrCpy$PageReinstall_NEW_Field_1"Обнаружена более старая версия ${APPLICATION_NAME}. Рекомендуется удалить её перед установкой. Выберите желаемое действие и нажмите Далее для продолжения."
StrCpy$PageReinstall_NEW_Field_2"Удалить перед установкой"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Выберите, как вы хотите установить ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Новая версия ${APPLICATION_NAME} уже установлена! Не рекомендуется устанавливать старую версию. Если вы действительно хотите, чтобы устанавливать старую версию, лучше удалить текущую версию. Выберите операцию, которую необходимо выполнить, и нажмите Далее, чтобы продолжить."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} уже установлена.\nВыберитеоперацию, которую необходимо выполнить, и нажмите Далее, чтобы продолжить."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Выберите, как вы хотите установить ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Новая версия ${APPLICATION_NAME} уже установлена! Не рекомендуется устанавливать старую версию. Если вы действительно хотите установить эту старую версию, то сначала лучше удалить текущую версию. Выберите желаемое действие и нажмите Далее для продолжения."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} уже установлена.\nВыберитежелаемое действие и нажмите Далее для продолжения."
StrCpy$UNINSTALL_MESSAGEBOX"Скорее всего, приложение ${APPLICATION_NAME} уже установлено в директорию '$INSTDIR'.\nВсе равно продолжить (не рекомендуется)?"
StrCpy$UNINSTALL_MESSAGEBOX"Похоже, что приложение ${APPLICATION_NAME} не установлено в каталог '$INSTDIR'.\nВсе равно продолжить (не рекомендуется)?"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Этому установщику требуются права администратора, попробуйте ещё раз"
StrCpy$INIT_INSTALLER_RUNNING"Установщик уже запущен."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Этот деинсталятор требует права администратора, попытайтесь ещё"
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Этому деинсталлятору требуются права администратора, попробуйте ещё раз"
StrCpy$INIT_UNINSTALLER_RUNNING"Программа удаления уже выполняется."
StrCpy$SectionGroup_Shortcuts"Ярлыки"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Zobrazi<EFBFBD> zoznam zmien"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Našli sa ${APPLICATION_EXECUTABLE} proces (y), ktoré je potrebné zastavi<76>.$\nChcete, aby ich inštalátor zastavil?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Proces ukonèenia nebol nájdený!"
StrCpy$PageReinstall_NEW_Field_1"Staršia verzia ${APPLICATION_NAME} je nainštalovaná vo vašom systéme. Odporúèam vám odinštalova<76> aktuálnu verziu pred inštaláciou. Vyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
StrCpy$PageReinstall_NEW_Field_1"Staršia verzia ${APPLICATION_NAME} je nainštalovaná vo vašom poèítaèi. Odporúèam vám odinštalova<76> aktuálnu verziu pred inštaláciou. Vyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
StrCpy$PageReinstall_NEW_Field_2"Odinštalova<EFBFBD> pred inštaláciou"
StrCpy$UNINSTALL_MESSAGEBOX"Nezdá sa, že ${APPLICATION_NAME} je nainštalovaný v prieèinku '$INSTDIR'.$\n$\nNapriek tomu pokraèova<76> (neodporúèa sa)?"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Tento inštalátor vyžaduje admin prístup, skúste to znova"
StrCpy$INIT_INSTALLER_RUNNING"Inštalátor je už spustený."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Tento odinštalátor vyžaduje admin prístup, skúste to znova"
StrCpy$INIT_UNINSTALLER_RUNNING"Odinštalátor je už spustený."
StrCpy$SectionGroup_Shortcuts"Zástupcovia"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Pokaži opombe k objavi"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Zaznana so dejavna opravila programa ${APPLICATION_EXECUTABLE}, ki pa morajo biti pred nadaljevanjem zaustavljena.$\nAli želite izvajanje teh dejanj končati?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Poteka zaustavljanje opravil programa ${APPLICATION_EXECUTABLE}"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Opravila, določenega za uničenje, ni mogoče najti!"
StrCpy$PageReinstall_NEW_Field_1"Nameščena je starejša različica ${APPLICATION_NAME}. Priporočljivo je najprej odstraniti obstoječo namestitev in šele nato namestiti novo. Izberite ustrezno možnost in kliknite za nadaljevanje."
StrCpy$PageReinstall_NEW_Field_2"Pred namestitvijo je treba obstoječo različico odstraniti"
StrCpy$UNINSTALL_MESSAGEBOX"Ni videti, da bi bil program ${APPLICATION_NAME} nameščen v mapi '$INSTDIR'.$\n$\nAli želite vseeno nadaljevati (ni priporočeno)?"
StrCpy$UNINSTALL_ABORT"Odstranjevanje namestitve je bilo prekinjeno s strani uporabnika"
StrCpy$INIT_NO_QUICK_LAUNCH"Bližnjica za hiter dostop (N/A)"
StrCpy$INIT_NO_DESKTOP"Bližnjica namizja (obstajajo predmeti za prepis)"
StrCpy$UAC_ERROR_ELEVATE"Ni mogoče dvigniti; napaka:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Namestilnik zahteva skrbniška dovoljenja."
StrCpy$INIT_INSTALLER_RUNNING"Namestilnik je že zagnan."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Program za odstranjevanje namestitve zahteva skrbniška dovoljenja."
StrCpy$INIT_UNINSTALLER_RUNNING"Program za odstranjevanje namestitve je že zagnan."
StrCpy$SectionGroup_Shortcuts"Bližnjice"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Mostrar las notas de la versión"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"El/los proceso/s ${APPLICATION_EXECUTABLE} debe/n ser detenidos.$\n¿Quiere que el instalador lo haga por usted?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"¡Proceso a detener no encontrado!"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"¡Proceso para detener no encontrado!"
StrCpy$PageReinstall_NEW_Field_1"Una versión anterior de ${APPLICATION_NAME} se encuentra instalada en el sistema. Se recomienda de instalar la versión actual antes de instalar la nueva. Seleccione la operacion deseada y haga click en Siguiente para continuar."
StrCpy$PageReinstall_NEW_Field_2"Desinstalar antes de instalar"
StrCpy$PageReinstall_NEW_Field_3"No desinstalar"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_TITLE"Ya está instalado"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Elija como quiere instalar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Una nueva versión de ${APPLICATION_NAME} ya está instalada. No es recomendable instalar una versión anterior. Si realmente quiere instalar esta versión anterior, es mejor que desinstale la versión actual primero. Seleccione la operación que desea realizar y pulse Next para continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} ya está instalada.\nSeleccione la operación que desea realizar y pulse Next para continuar."
StrCpy$OPTION_SECTION_SC_START_MENU_Desc"Acceso Directo de ${APPLICATION_NAME}"
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Acceso Directo de Escritorio para ${APPLICATION_NAME}"
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Lanzador Rápido de Accesos Director para ${APPLICATION_NAME}."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Remueva la carpeta de datos de ${APPLICATION_NAME} del computador."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Elimine la carpeta de datos de ${APPLICATION_NAME} del computador."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"¿Desea eliminar la carpeta de datos de ${APPLICATION_NAME}?"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Deja sin marcar para mantener la carpeta de datos para uso posterior, o del marque para eliminar la carpeta de datos."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Si, Elimine esta carpeta de datos."
StrCpy$UNINSTALLER_REGISTRY_Detail"Escribiendo Llaves en el Registro del Instalador"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Déjelo sin marcar para mantener la carpeta de datos para uso posterior o márquelo para eliminar la carpeta de datos."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Sí, elimine esta carpeta de datos."
StrCpy$UNINSTALLER_REGISTRY_Detail"Escribiendo claves en el registro del instalador"
StrCpy$UNINSTALLER_FINISHED_Detail"Terminado"
StrCpy$UNINSTALL_MESSAGEBOX"Parece que ${APPLICATION_NAME} no está instalado en el directorio '$INSTDIR'.$$ ¿Continuar de todos modos? (No Recomendado)"
StrCpy$UNINSTALL_ABORT"Desinstalación cancelada por el usuario"
StrCpy$INIT_NO_QUICK_LAUNCH"Acceso Directo al Lanzador Rápido (N/A)"
StrCpy$INIT_NO_QUICK_LAUNCH"Atajo de inicio rápido (N/A)"
StrCpy$INIT_NO_DESKTOP"Atajo de escritorio (sobreescribe el existente)"
StrCpy$UAC_ERROR_ELEVATE"No se ha podido elevar, Error:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"El instalador requiere acceso administrativo, intente de nuevo"
StrCpy$UAC_ERROR_ELEVATE"No se ha podido elevar, error:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"El instalador requiere acceso administrativo, inténtelo de nuevo"
StrCpy$INIT_INSTALLER_RUNNING"El instalador ya se encuentra en ejecución"
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"El desinstalador requiere acceso administrativo, intente de nuevo"
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"El desinstalador requiere acceso administrativo, inténtelo de nuevo"
StrCpy$INIT_UNINSTALLER_RUNNING"El desinstalador ya se encuentra en ejecución."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Mostrar notas de la versión"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Parando el proceso ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Proceso a detener no encontrado!"
StrCpy$PageReinstall_NEW_Field_1"Una versión anterior de ${APPLICATION_NAME} esta instalada en el sistema. Es recomendado que quite esta versión antes de instalar. Elija la operación a realizar y seleccione Siguiente para continuar."
StrCpy$PageReinstall_NEW_Field_2"Des-instale antes de Instalar."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Elija como desea instalar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Una versión mas reciente de ${APPLICATION_NAME} esta actualmente instalada! No es recomendado que instale una versión antigua. Si realmente desea instalar esta versión obsoleta, es mejor que des-instale la versión actual primero. Seleccione la operación que desea realizar y presione en Siguiente para continuar. "
StrCpy$UNINSTALLER_REGISTRY_Detail"Escribiendo claves de Registro del Instalador"
StrCpy$UNINSTALLER_FINISHED_Detail"Terminado"
StrCpy$UNINSTALL_ABORT"Des-instalación abortada por el usuario"
StrCpy$INIT_NO_DESKTOP"Acceso Directo en Escritorio (Sobrescribe existentes)"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Este instalador requiere acceso Administrador, intente de nuevo. "
StrCpy$INIT_INSTALLER_RUNNING"El instalador ya esta corriendo."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Este des-instalador requiere acceso administrador, intente de nuevo"
StrCpy$INIT_UNINSTALLER_RUNNING"El des-instalador ya esta corriendo"
StrCpy$SectionGroup_Shortcuts"Accesos Directos"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$OPTION_SECTION_SC_SHELL_EXT_SECTION"Integration for Windows Explorer"
StrCpy$OPTION_SECTION_SC_SHELL_EXT_DetailPrint"Installing Integration for Windows Explorer"
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Quick Launch shortcut for ${APPLICATION_NAME}."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Hittade ${APPLICATION_EXECUTABLE} process(er) som behöver stoppas.$\nVill du att installationsprogrammet ska stoppa dessa åt dig?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Processen att döda hittades inte!"
StrCpy$PageReinstall_NEW_Field_1"En tidigare version av ${APPLICATION_NAME} är installerad på ditt system. Det är rekommenderat att du avinstallerar den nuvarande versionen före installation. Välj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
StrCpy$PageReinstall_NEW_Field_2"Avinstallera före installation"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Välj hur du vill installera ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"En nyare version av ${APPLICATION_NAME} är redan installerad! Det rekommenderas inte att du installerar en äldre version. Om du verkligen vill installera denna äldre versionen, är det bättre att du avinstallerar den nuvarande versionen först. Välj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} är redan installerad.\nVälj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"${APPLICATION_NAME} uygulamasını nasıl yüklemek istediğinizi seçin."
StrCpy$PageReinstall_OLD_Field_1"${APPLICATION_NAME} uygulamasının daha yeni sürümü zaten yüklü! Daha eski bir sürümünü yüklemeniz önerilmez. Gerçekten bu eski sürümü yüklemek isterseniz, ilk olarak geçerli sürümü kaldırmanız tavsiye edilir. Yapmak istediğiniz işlemi seçin ve devam etmek üzere İleri tıklayın."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} zaten yüklü.\nYapmak istediğiniz işlemi seçin ve devam etmek için İleri tıklayın."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} zaten yüklü.\n\nYapmak istediğiniz işlemi seçin ve devam etmek için İleri tıklayın."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Показати примітки до випуску"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Знайдено процес(и) ${APPLICATION_EXECUTABLE}, які необхідно зупинити.$\nХочете щоб програма установки зробила це самостійно?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Завершення процесів ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Не знайдено процеси, які необхідно зупинити!"
StrCpy$PageReinstall_NEW_Field_1"Знайдено застарілу версію програми ${APPLICATION_NAME}. Рекомендуємо її спочатку видалити. Оберіть подальшу дію та натисніть $\"Далі$\"."
StrCpy$PageReinstall_NEW_Field_2"Видалити перед установкою"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Оберіть, як ви хочете установити ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Знайдено новішу версію ${APPLICATION_NAME}! Ми не рекомендуємо встановлювати стару версію. Якщо ви все ж бажаєте встановити цю версію, спочатку видаліть поточну версію. Оберіть подальшу дію та натисніть $\"Далі$\"."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} вже встановлено.↩\nОберіть подальшу дію та натисніть $\"Далі$\"."
{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}
{\f172\froman\fcharset238\fprq2 Times New Roman CE;}{\f173\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f175\froman\fcharset161\fprq2 Times New Roman Greek;}{\f176\froman\fcharset162\fprq2 Times New Roman Tur;}
{\f177\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f178\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f179\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f180\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid6712196\rsid7485074\rsid11352300\rsid15940516}{\*\generator Microsoft Word 11.0.5604;}{\info{\title Processes v1}{\author Hardwired}{\operator Hardwired}{\creatim\yr2004\mo12\dy12\hr23\min42}
\par }\pard \qj \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15940516 {\f39\fs20\insrsid15940516 This software binaries and source-code are free for any kind of use, including commercial use. }{
\f39\fs20\insrsid7485074\charrsid7485074 There is no restriction and no guaranty for using}{\f39\fs20\insrsid7485074\charrsid7485074 t}{\f39\fs20\insrsid7485074\charrsid7485074 his software}{\f39\fs20\insrsid7485074\charrsid7485074 and/or it
s source-code. }{\f39\fs20\insrsid15940516
\par I}{\f39\fs20\insrsid7485074\charrsid7485074 f you use the plug}{\f39\fs20\insrsid7485074\charrsid7485074 -}{\f39\fs20\insrsid7485074\charrsid7485074 in }{\f39\fs20\insrsid7485074\charrsid7485074 and/}{\f39\fs20\insrsid7485074\charrsid7485074 or it}{
\f39\fs20\insrsid7485074\charrsid7485074 s}{\f39\fs20\insrsid7485074\charrsid7485074 source-code, I would }{\f39\fs20\insrsid7485074\charrsid7485074 appreciate }{\f39\fs20\insrsid7485074\charrsid7485074 if my name is mentioned.}{
-Removed UAC::RunElevatedAndProcessMessages (UAC::RunElevated now supports non NULL $HWNDParent)
-Removed several useless sample scripts
v0.0.7e - 20080229 (AndersK)
*Added ugly hack for hackwnd to find correct title and give us a proper taskbar so the elevation dialog does not get lost (2000,XP (This also fixed Alt-Tab icon on Vista))
*Should compile with MSVC2005 now (Thanks Case)
*More unicode fixes, this time even tested with NSIS Unicode (Only RunElevated and Exec tested)
v0.0.7d - 20080226 (AndersK)
*Fixed a couple of unicode version bugs (Unicode version still untested)
*Fixed weird XP string length bug (Thanks kfank)
v0.0.7c - 20080218 (AndersK)
*Fixed SyncVars string length bug
v0.0.7b - 20080205 (AndersK)
*Fixed DelayLoadDlls() problem on NT4
v0.0.7 - 20080120 (AndersK)
+Added UAC::StackPush (For use with ExecCodeSegment)
v0.0.6d - 20071108 (AndersK)
+Now syncs basic registers/variables before calling UAC::*Exec* and UAC::ExecCodeSegment (r0-r9,R0-R9,$CMDLINE,$INSTDIR,$OUTDIR,$EXEDIR,$LANGUAGE)
+Added UAC::RunElevatedAndProcessMessages, this can be called after .onInit (Very experimental, DO NOT USE)
+New include file with helper macros: UAC.nsh
*Replazed Clammerz hack with a better version
v0.0.6c - 20071014 (AndersK)
+Check for and split up "domain\user" style input in RunAs.cpp for CreateProcessWithLogonW
*Added a ugly hack to trick messagebox'es in .OnInit to appear correctly on Vista (Thanks Clammerz)
v0.0.6b - 20070523 (AndersK)
*Fixed showwindow flag (Thanks for the help kichik)
v0.0.6 - 20070512 (AndersK)
+Added basic language support for MyRunAs dialog.
v0.0.5e - 20070509 (AndersK)
*Fixed detection of UAC mode?
+IPC window is visible (but offscreen) during elevation to help with SetForegroundWindow/Focus problems
v0.0.5d - 20070324 (AndersK)
*Fixed stupid IsAdmin bug
v0.0.5c - 20070304 (AndersK)
*_IsAdmin now uses CheckTokenMembership if it exists ( MSKB:Q118626 / http://blogs.msdn.com/larryosterman/archive/2007/03/14/why-does-kb-118626-use-accesscheck-to-check-if-you-re-a-member-of-the-administrators-group.aspx )
v0.0.5b - 20070301 (AndersK)
*Fixed ExecCodeSegment (Thread now calls CoInitialize)
v0.0.5 - 20070228 (AndersK)
+Added ExecCodeSegment (You can now call ANY code in the context of the original user)
v0.0.4b - 20070226 (AndersK)
*Fixed (My)RunAs font (http://blogs.msdn.com/oldnewthing/archive/2005/02/04/366987.aspx)
v0.0.4 - 20070225 (AndersK)
+Added (My)RunAs dialog, used on Vista when running as LUA with UAC off
+Always uses /NCRC for elevated instance
*Now compiles as UNICODE (Untested, no UnicodeNSIS to test on)
v0.0.3 - 20070224 (AndersK)
+Added Exec/ExecWait
+Added Verb & ShowWindow support for ShellExec[Wait]
This software is provided 'as-is', without any express or implied warranty.
ZLIB/LIBPNG LICENSE
-------------------
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
staticLPCTSTRg_RunAsHelpText=_T("You may not have the necessary permissions to use all the features of the program you are about to run. You may run this program as a different user or continue to run the program as the current user.");
staticLPCTSTRg_RunAsCurrUsrFmt=_T("&Current user (%s)");//Max 50 chars!
staticLPCTSTRg_RunAsSpecHelp=_T("Run the program as the &following user:");
//Try to find [\\]domain\user and split into username and domain strings
WCHAR*pUName=wszUName,*pDomain=0;
p=wszUName;
//if (*p==p[1]=='\\')pUName=(p+=2);else \ //Should we still split things up if the string starts with \\ ? Is it possible to use \\machine\user at all?
++p;//Don't parse "\something", require at least one char before backslash "?[*\]something"
Every function will try to emulate the basic NSIS instruction (of similar name) when UAC::RunElevated has not "succeeded" or running on a system that does not support elevation (Win9x/NT4)</p>
<tr><td><spanclass="nsisvar">$0</span></td><td>Win32 error code (0 on success, 1223 if user aborted elevation dialog, anything else should be treated as a fatal error)</td></tr>
<tr><td>0</td><td>UAC is not supported by the OS</td></tr>
<tr><td>1</td><td>Started a elevated child process, the current process should act like a wrapper (Call Quit without any further processing)</td></tr>
<tr><td>2</td><td>The process is already running @ HighIL (Member of admin group)</td></tr>
<tr><td>3</td><td>You should call RunElevated again (This can happen if a user without admin priv. is used in the runas dialog)</td></tr>
</table>
</td></tr>
<tr><td><spanclass="nsisvar">$2</span></td><td><spanclass="code">If <spanclass="nsisvar">$0</span>==0 &&<spanclass="nsisvar">$1</span>==1</span>: ExitCode of the elevated fork process (The NSIS errlvl is also set)</td></tr>
<tr><td><spanclass="nsisvar">$3</span></td><td><spanclass="code">If <spanclass="nsisvar">$0</span>==0</span>: 1 if the user is a member of the admin group or 0 otherwise</td></tr>
</table></td></tr>
<tr><td>Description:</td><td>Allows non-admin/UAC.LUA users to re-spawn the installer as another user and UAC.Admin users to elevate.</td></tr>
<tr><td>Returns:</td><td>[None] (ErrorFlag is set on error)</td></tr>
<tr><td>Description:</td><td>Calls NSIS function in LUA/outer instance (If you use instructions that alter the UI or the stack/variables in the code segment (StrCpy,Push/Pop/Exch,DetailPrint etc.) they will affect the hidden wrapper installer and not "your" installer instance)</td></tr>
<tr><td>Returns:</td><td><spanclass="nsisvar">$0</span> !=0 if supported</td></tr>
<tr><td>Description:</td><td>Check if the OS supports UAC (And the user has UAC turned on) <spanclass="importanttxt">This function only tests if UAC is active, will return 0 on NT5 even though runas is implemented on those platforms, will also return 0 on NT6+ if UAC is off. You should only call this function during testing, NOT to determine if you can call UAC::RunElevated</span></td></tr>
StrCmp1223$0UAC_ElevationAborted; UAC dialog aborted by user?
StrCmp0$00UAC_Err; Error?
StrCmp1$10UAC_Success;Are we the real deal or just the wrapper?
Quit
UAC_Err:
MessageBoxmb_iconstop"Unable to elevate , error $0"
Abort
UAC_ElevationAborted:
/*System::Call"user32::CreateWindowEx(i ${WS_EX_TRANSPARENT}|${WS_EX_LAYERED}, t 'Button', t 'blah', i 0, i 10, i 10, i 10, i 10, i 0, i 0, i 0) i .r0"
message(STATUS"Unable to find a related icon that matches pattern ${pattern} for variable ${appsources} - application will not have an application icon!")
endif(_icons)
else(PNG2ICO_EXECUTABLEANDWINDRES_EXECUTABLE)
message(FATAL_ERROR"Unable to find the png2ico or windres utilities - application will not have an application icon!")
message(WARNING"Unable to find the png2ico or windres utilities - application will not have an application icon!")
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the names of Kitware, Inc., the Insight Software Consortium, nor the names of their contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# This function is intended to be used in FindXXX.cmake modules files.
# It handles NAME_FIND_VERSION and NAME_VERSION variables in a Module.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.