mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2026-04-03 18:11:32 +02:00
Compare commits
144 Commits
v3.2.0-rc3
...
v3.0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
068ad89d8d | ||
|
|
df6abcb68d | ||
|
|
17b991bda3 | ||
|
|
a909ffce28 | ||
|
|
25c8077378 | ||
|
|
75f5cfff0b | ||
|
|
991f84844e | ||
|
|
90f2b01659 | ||
|
|
7a9ed6cc0d | ||
|
|
3e7d09b520 | ||
|
|
24da469d72 | ||
|
|
71e86ad27c | ||
|
|
a5500297f7 | ||
|
|
ea2d1be222 | ||
|
|
1537577ade | ||
|
|
924ed77563 | ||
|
|
c44c8c8876 | ||
|
|
c3b0e98e3e | ||
|
|
5ac3b98dfb | ||
|
|
c8ca587130 | ||
|
|
f9ae321353 | ||
|
|
b7f7366d3a | ||
|
|
67d815a4c5 | ||
|
|
2170d72aec | ||
|
|
bd3e246ce7 | ||
|
|
2da9edecbe | ||
|
|
c287b668d3 | ||
|
|
568b738fa9 | ||
|
|
5125724e87 | ||
|
|
b0f67d2e0d | ||
|
|
0fe6f075f1 | ||
|
|
c3b6d3f04a | ||
|
|
ae57c1c752 | ||
|
|
e6975840a7 | ||
|
|
f15c627c82 | ||
|
|
d0b19559d3 | ||
|
|
c9fe7fa735 | ||
|
|
d6b057e7e8 | ||
|
|
e8c92ec50f | ||
|
|
ce55a4678c | ||
|
|
e4004035fe | ||
|
|
6125aca847 | ||
|
|
ddd1552047 | ||
|
|
de38a1e309 | ||
|
|
3afa836744 | ||
|
|
66a19e533a | ||
|
|
00fa184507 | ||
|
|
169bf7f032 | ||
|
|
771263aa25 | ||
|
|
a6cab38ebd | ||
|
|
9b08f287d3 | ||
|
|
82e42c6f78 | ||
|
|
1003b0745f | ||
|
|
4af3e3f7ec | ||
|
|
0a11df6824 | ||
|
|
b3776b622c | ||
|
|
30f84c3e35 | ||
|
|
161be14dc6 | ||
|
|
d4809ebe4c | ||
|
|
ee1096f802 | ||
|
|
89113db3ce | ||
|
|
020d8761bf | ||
|
|
1dd53d3797 | ||
|
|
3c7cc7c0a9 | ||
|
|
e98911503c | ||
|
|
e41a000db8 | ||
|
|
1918e7f6be | ||
|
|
87e38df6a2 | ||
|
|
131a486c13 | ||
|
|
ab563dcef4 | ||
|
|
55da58d662 | ||
|
|
5aeae28805 | ||
|
|
722fc8eb67 | ||
|
|
723ffc81fb | ||
|
|
e8c6b1a1be | ||
|
|
95fc81cf70 | ||
|
|
015f16088d | ||
|
|
6f67ca5906 | ||
|
|
3b58847c51 | ||
|
|
2e96131926 | ||
|
|
b9801772a1 | ||
|
|
a3b506562c | ||
|
|
6a4f22e046 | ||
|
|
259aaf74cc | ||
|
|
75ac240030 | ||
|
|
b8556f9c0f | ||
|
|
1c3abae484 | ||
|
|
d3833cc6ac | ||
|
|
0a62628f8a | ||
|
|
772a34ba46 | ||
|
|
42ea6b5427 | ||
|
|
3ea57abfec | ||
|
|
6f2156cacd | ||
|
|
9e5225d83d | ||
|
|
957dd16770 | ||
|
|
95401e5985 | ||
|
|
a15b66d525 | ||
|
|
e0b53b3bda | ||
|
|
2015aab626 | ||
|
|
90402f8dcb | ||
|
|
0de6823cca | ||
|
|
c560db000a | ||
|
|
fba819e65b | ||
|
|
d02f1b80f3 | ||
|
|
fc79e035c6 | ||
|
|
ee332dcaec | ||
|
|
b5fc4f86a7 | ||
|
|
3ac99c75b0 | ||
|
|
a02e4a2913 | ||
|
|
a7b93e36ff | ||
|
|
a742a42f4c | ||
|
|
2537f0cd4c | ||
|
|
4e44f46b9e | ||
|
|
b86bc92875 | ||
|
|
c3b1e4bd9a | ||
|
|
3fd3f85558 | ||
|
|
811b0eb6db | ||
|
|
7acc7dae35 | ||
|
|
4c9e19b82c | ||
|
|
3770e75561 | ||
|
|
14d4160729 | ||
|
|
6dcf261abe | ||
|
|
3d3d6bf2d9 | ||
|
|
a957a9924e | ||
|
|
7de04654c5 | ||
|
|
a60fa8ba85 | ||
|
|
6ad1357ac0 | ||
|
|
48b8848dcc | ||
|
|
42f7d3e538 | ||
|
|
ce126e6d7f | ||
|
|
824e853b2a | ||
|
|
97020728c1 | ||
|
|
ff175088a3 | ||
|
|
0066de26bb | ||
|
|
68f137fff5 | ||
|
|
aa5ff75fa2 | ||
|
|
37a0474f09 | ||
|
|
802c5f0a0a | ||
|
|
d45c8aee8e | ||
|
|
2424803bdd | ||
|
|
63233bf09e | ||
|
|
493cba2e55 | ||
|
|
de3b56d999 | ||
|
|
e3c10bde59 |
144
.drone.yml
144
.drone.yml
@@ -2,46 +2,41 @@ kind: pipeline
|
||||
name: qt-5.12
|
||||
|
||||
steps:
|
||||
- name: build and test
|
||||
image: nextcloudci/client-5.12:client-5.12-9
|
||||
- name: cmake
|
||||
image: nextcloudci/client-5.12:client-5.12-11
|
||||
volumes:
|
||||
- name: build
|
||||
path: /drone/build
|
||||
commands:
|
||||
# Install QtKeyChain
|
||||
- /bin/bash -c "
|
||||
export CC=gcc-7 &&
|
||||
export CXX=g++-7 &&
|
||||
export QT_BASE_DIR=/opt/qt5.12.9 &&
|
||||
export QTDIR=\$QT_BASE_DIR &&
|
||||
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
||||
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
||||
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
||||
cd /tmp &&
|
||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||
cd qtkeychain &&
|
||||
git checkout v0.9.1 &&
|
||||
mkdir build &&
|
||||
cd build &&
|
||||
cmake ../ &&
|
||||
make &&
|
||||
make install"
|
||||
# Build client
|
||||
- /bin/bash -c "
|
||||
export CC=gcc-7 &&
|
||||
export CXX=g++-7 &&
|
||||
export QT_BASE_DIR=/opt/qt5.12.9 &&
|
||||
export QTDIR=\$QT_BASE_DIR &&
|
||||
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
||||
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
||||
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
||||
mkdir build &&
|
||||
cd build &&
|
||||
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||
make &&
|
||||
useradd -m -s /bin/bash test &&
|
||||
chown -R test:test . &&
|
||||
su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test"
|
||||
- cd /drone/build
|
||||
- cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../src
|
||||
- name: compile
|
||||
image: nextcloudci/client-5.12:client-5.12-11
|
||||
volumes:
|
||||
- name: build
|
||||
path: /drone/build
|
||||
commands:
|
||||
- cd /drone/build
|
||||
- make -j$(nproc)
|
||||
- name: test
|
||||
image: nextcloudci/client-5.12:client-5.12-11
|
||||
volumes:
|
||||
- name: build
|
||||
path: /drone/build
|
||||
commands:
|
||||
- cd /drone/build
|
||||
- useradd -m -s /bin/bash test
|
||||
- chown -R test:test .
|
||||
- su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test
|
||||
|
||||
volumes:
|
||||
- name: build
|
||||
temp: {}
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- master
|
||||
- stable-*
|
||||
event:
|
||||
- pull_request
|
||||
- push
|
||||
@@ -51,48 +46,48 @@ kind: pipeline
|
||||
name: qt-5.12-clang
|
||||
|
||||
steps:
|
||||
- name: build and test
|
||||
image: nextcloudci/client-5.12:client-5.12-9
|
||||
- name: cmake
|
||||
image: nextcloudci/client-5.12:client-5.12-11
|
||||
volumes:
|
||||
- name: build
|
||||
path: /drone/build
|
||||
commands:
|
||||
# Install QtKeyChain
|
||||
- /bin/bash -c "
|
||||
export CC=clang-6.0 &&
|
||||
export CXX=clang++-6.0 &&
|
||||
export QT_BASE_DIR=/opt/qt5.12.9 &&
|
||||
export QTDIR=\$QT_BASE_DIR &&
|
||||
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
||||
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
||||
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
||||
cd /tmp &&
|
||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||
cd qtkeychain &&
|
||||
git checkout v0.9.1 &&
|
||||
mkdir build &&
|
||||
cd build &&
|
||||
cmake ../ &&
|
||||
make &&
|
||||
make install"
|
||||
# Build client
|
||||
- /bin/bash -c "
|
||||
export CC=clang-6.0 &&
|
||||
export CXX=clang++-6.0 &&
|
||||
export QT_BASE_DIR=/opt/qt5.12.9 &&
|
||||
export QTDIR=\$QT_BASE_DIR &&
|
||||
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
||||
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
||||
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
||||
mkdir build &&
|
||||
cd build &&
|
||||
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DNO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||
make &&
|
||||
useradd -m -s /bin/bash test &&
|
||||
chown -R test:test . &&
|
||||
su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test"
|
||||
# Static analysis with clang-tidy
|
||||
- "! run-clang-tidy-6.0 -p build -quiet | grep -A 5 ': error:'"
|
||||
- cd /drone/build
|
||||
- cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clang++-10 -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../src
|
||||
- name: compile
|
||||
image: nextcloudci/client-5.12:client-5.12-11
|
||||
volumes:
|
||||
- name: build
|
||||
path: /drone/build
|
||||
commands:
|
||||
- cd /drone/build
|
||||
- ninja
|
||||
- name: test
|
||||
image: nextcloudci/client-5.12:client-5.12-11
|
||||
volumes:
|
||||
- name: build
|
||||
path: /drone/build
|
||||
commands:
|
||||
- cd /drone/build
|
||||
- useradd -m -s /bin/bash test
|
||||
- chown -R test:test .
|
||||
- su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test
|
||||
- name: clang-tidy
|
||||
image: nextcloudci/client-5.12:client-5.12-11
|
||||
volumes:
|
||||
- name: build
|
||||
path: /drone/build
|
||||
commands:
|
||||
- "! run-clang-tidy-10 -j$(nproc) -p /drone/build -header-filter $PWD -quiet | grep -A 5 ': error:'"
|
||||
|
||||
volumes:
|
||||
- name: build
|
||||
temp: {}
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- master
|
||||
- stable-*
|
||||
event:
|
||||
- pull_request
|
||||
- push
|
||||
@@ -115,6 +110,7 @@ steps:
|
||||
trigger:
|
||||
branch:
|
||||
- master
|
||||
- stable-*
|
||||
event:
|
||||
- pull_request
|
||||
- push
|
||||
|
||||
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
|
||||
|
||||
# Translations
|
||||
Icon[ca]=@APPLICATION_ICON_NAME@
|
||||
Name[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
|
||||
Name[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
|
||||
Comment[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
|
||||
GenericName[ca]=Directori de sincronització
|
||||
GenericName[ca]=Sincronització de carpetes
|
||||
|
||||
@@ -6,7 +6,8 @@ set( APPLICATION_VENDOR "Nextcloud GmbH" )
|
||||
set( APPLICATION_UPDATE_URL "https://updates.nextcloud.org/client/" CACHE STRING "URL for updater" )
|
||||
set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" )
|
||||
set( APPLICATION_ICON_NAME "Nextcloud" )
|
||||
set( APPLICATION_SERVER_URL "" CACHE STRING "URL for the server to use. If entered the server can only connect to this instance" )
|
||||
set( APPLICATION_SERVER_URL "" CACHE STRING "URL for the server to use. If entered, the UI field will be pre-filled with it" )
|
||||
set( APPLICATION_SERVER_URL_ENFORCE ON ) # If set and APPLICATION_SERVER_URL is defined, the server can only connect to the pre-defined URL
|
||||
set( APPLICATION_REV_DOMAIN "com.nextcloud.desktopclient" )
|
||||
|
||||
set( LINUX_PACKAGE_SHORTNAME "nextcloud" )
|
||||
@@ -35,3 +36,25 @@ set( APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "#0082c9" CACHE STRING "Hex colo
|
||||
set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#ffffff" CACHE STRING "Hex color of the text in the wizard header")
|
||||
option( APPLICATION_WIZARD_USE_CUSTOM_LOGO "Use the logo from ':/client/theme/colored/wizard_logo.png' else the default application icon is used" ON )
|
||||
|
||||
|
||||
#
|
||||
## Windows Shell Extensions & MSI - IMPORTANT: Generate new GUIDs for custom builds with "guidgen" or "uuidgen"
|
||||
#
|
||||
if(WIN32)
|
||||
# Context Menu
|
||||
set( WIN_SHELLEXT_CONTEXT_MENU_GUID "{BC6988AB-ACE2-4B81-84DC-DC34F9B24401}" )
|
||||
|
||||
# Overlays
|
||||
set( WIN_SHELLEXT_OVERLAY_GUID_ERROR "{E0342B74-7593-4C70-9D61-22F294AAFE05}" )
|
||||
set( WIN_SHELLEXT_OVERLAY_GUID_OK "{E1094E94-BE93-4EA2-9639-8475C68F3886}" )
|
||||
set( WIN_SHELLEXT_OVERLAY_GUID_OK_SHARED "{E243AD85-F71B-496B-B17E-B8091CBE93D2}" )
|
||||
set( WIN_SHELLEXT_OVERLAY_GUID_SYNC "{E3D6DB20-1D83-4829-B5C9-941B31C0C35A}" )
|
||||
set( WIN_SHELLEXT_OVERLAY_GUID_WARNING "{E4977F33-F93A-4A0A-9D3C-83DEA0EE8483}" )
|
||||
|
||||
# MSI Upgrade Code (without brackets)
|
||||
set( WIN_MSI_UPGRADE_CODE "FD2FCCA9-BB8F-4485-8F70-A0621B84A7F4" )
|
||||
|
||||
# Windows build options
|
||||
option( BUILD_WIN_MSI "Build MSI scripts and helper DLL" OFF )
|
||||
option( BUILD_WIN_TOOLS "Build Win32 migration tools" OFF )
|
||||
endif()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
set( MIRALL_VERSION_MAJOR 3 )
|
||||
set( MIRALL_VERSION_MINOR 0 )
|
||||
set( MIRALL_VERSION_PATCH 0 )
|
||||
set( MIRALL_VERSION_PATCH 2 )
|
||||
set( MIRALL_VERSION_YEAR 2020 )
|
||||
set( MIRALL_SOVERSION 0 )
|
||||
|
||||
|
||||
@@ -1,2 +1,7 @@
|
||||
# traverse into osx subdirectory to install and patch the create-pack script
|
||||
add_subdirectory(osx)
|
||||
if(APPLE)
|
||||
# traverse into osx subdirectory to install and patch the create-pack script
|
||||
add_subdirectory(osx)
|
||||
elseif(WIN32)
|
||||
# MSI package scripts, helper DLL and migration tools
|
||||
add_subdirectory(win)
|
||||
endif()
|
||||
|
||||
@@ -86,7 +86,7 @@ cp -P -r /usr/lib/x86_64-linux-gnu/nss ./usr/lib/
|
||||
|
||||
# Use linuxdeployqt to deploy
|
||||
cd /build
|
||||
wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
|
||||
wget --ca-directory=/etc/ssl/certs/ -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
|
||||
chmod a+x linuxdeployqt*.AppImage
|
||||
./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract
|
||||
rm ./linuxdeployqt-continuous-x86_64.AppImage
|
||||
|
||||
@@ -15,10 +15,10 @@ OBS_PROJECT_BETA=home:ivaradi:beta
|
||||
OBS_PACKAGE=nextcloud-desktop
|
||||
|
||||
if test "${DRONE_TARGET_BRANCH}" = "stable-2.6"; then
|
||||
UBUNTU_DISTRIBUTIONS="bionic eoan focal groovy"
|
||||
UBUNTU_DISTRIBUTIONS="bionic focal groovy"
|
||||
DEBIAN_DISTRIBUTIONS="buster stretch testing"
|
||||
else
|
||||
UBUNTU_DISTRIBUTIONS="eoan focal groovy"
|
||||
UBUNTU_DISTRIBUTIONS="focal groovy"
|
||||
DEBIAN_DISTRIBUTIONS="testing"
|
||||
fi
|
||||
|
||||
|
||||
@@ -16,3 +16,4 @@ configure_file(create_mac.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/create_mac.sh)
|
||||
configure_file(macosx.pkgproj.cmake ${CMAKE_CURRENT_BINARY_DIR}/macosx.pkgproj)
|
||||
configure_file(pre_install.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/pre_install.sh)
|
||||
configure_file(post_install.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/post_install.sh)
|
||||
configure_file(QtWebEngineProcess.entitlements ${CMAKE_CURRENT_BINARY_DIR}/QtWebEngineProcess.entitlements)
|
||||
|
||||
8
admin/osx/QtWebEngineProcess.entitlements
Normal file
8
admin/osx/QtWebEngineProcess.entitlements
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.cs.disable-executable-page-protection</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
8
admin/win/CMakeLists.txt
Normal file
8
admin/win/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
# MSI package scripts, helper DLL and migration tools
|
||||
if(BUILD_WIN_MSI)
|
||||
add_subdirectory(msi)
|
||||
endif()
|
||||
|
||||
if(BUILD_WIN_MSI OR BUILD_WIN_TOOLS)
|
||||
add_subdirectory(tools)
|
||||
endif()
|
||||
25
admin/win/msi/CMakeLists.txt
Normal file
25
admin/win/msi/CMakeLists.txt
Normal file
@@ -0,0 +1,25 @@
|
||||
if(CMAKE_SIZEOF_VOID_P MATCHES 4)
|
||||
set(MSI_BUILD_ARCH x86)
|
||||
else()
|
||||
set(MSI_BUILD_ARCH x64)
|
||||
endif()
|
||||
|
||||
string(SUBSTRING ${GIT_SHA1} 0 7 GIT_REVISION)
|
||||
|
||||
set(VERSION "${MIRALL_VERSION_MAJOR}.${MIRALL_VERSION_MINOR}.${MIRALL_VERSION_PATCH}.${MIRALL_VERSION_BUILD}")
|
||||
|
||||
set(MSI_INSTALLER_FILENAME "${APPLICATION_SHORTNAME}-${VERSION}-${MSI_BUILD_ARCH}.msi")
|
||||
|
||||
configure_file(OEM.wxi.in ${CMAKE_CURRENT_BINARY_DIR}/OEM.wxi)
|
||||
configure_file(collect-transform.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/collect-transform.xsl)
|
||||
configure_file(make-msi.bat.in ${CMAKE_CURRENT_BINARY_DIR}/make-msi.bat)
|
||||
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/OEM.wxi
|
||||
${CMAKE_CURRENT_BINARY_DIR}/collect-transform.xsl
|
||||
${CMAKE_CURRENT_BINARY_DIR}/make-msi.bat
|
||||
Platform.wxi
|
||||
Nextcloud.wxs
|
||||
gui/banner.bmp
|
||||
gui/dialog.bmp
|
||||
DESTINATION msi/)
|
||||
207
admin/win/msi/Nextcloud.wxs
Normal file
207
admin/win/msi/Nextcloud.wxs
Normal file
@@ -0,0 +1,207 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
-->
|
||||
<?include $(sys.CURRENTDIR)OEM.wxi?>
|
||||
<?include $(sys.CURRENTDIR)Platform.wxi?>
|
||||
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
|
||||
|
||||
<!--
|
||||
When to change the Product GUID:
|
||||
https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/
|
||||
https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/checking-for-oldies/
|
||||
|
||||
We change the Product Id for every release, to let up-/downgrading always work.
|
||||
But we then should never change the UpgradeCode.
|
||||
-->
|
||||
<Product Name="$(var.AppName)" Manufacturer="$(var.AppVendor)"
|
||||
Id="*"
|
||||
UpgradeCode="$(var.UpgradeCode)"
|
||||
Language="1033" Codepage="$(var.codepage)" Version="$(var.VerFull)">
|
||||
<Package Id="*" Keywords="Installer" Description="$(var.AppName) $(var.VerDesc)" Manufacturer="$(var.AppVendor)"
|
||||
InstallerVersion="300" Platform="$(var.Platform)" Languages="1033" Compressed="yes" SummaryCodepage="$(var.codepage)" InstallScope="perMachine" />
|
||||
|
||||
<!--
|
||||
Upgrading: Since we always want to allow up-/downgrade, we don't specify a maximum version, thus
|
||||
leading the WiX linker (light.exe) to trigger the following warning:
|
||||
warning LGHT1076 : ICE61: This product should remove only older versions of itself. No Maximum version was detected for the current product. (WIX_UPGRADE_DETECTED)
|
||||
We suppress the warning: light.exe -sw1076
|
||||
|
||||
If at some point we want to change this behaviour, read the docs:
|
||||
https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/replacing-ourselves/
|
||||
https://www.joyofsetup.com/2010/01/16/major-upgrades-now-easier-than-ever/
|
||||
-->
|
||||
<MajorUpgrade Schedule="afterInstallInitialize" AllowDowngrades="yes" />
|
||||
|
||||
<Media Id="1" Cabinet="$(var.AppShortName).cab" EmbedCab="yes" />
|
||||
|
||||
<!-- If already installed: Use previously chosen path (use 32-bit registry like NSIS does) -->
|
||||
<Property Id="INSTALLDIR">
|
||||
<RegistrySearch Id="RegistryInstallDir" Type="raw" Root="HKLM" Key="Software\$(var.AppVendor)\$(var.AppName)" Win64="no" />
|
||||
</Property>
|
||||
|
||||
<!-- Detect legacy NSIS installation -->
|
||||
<Property Id="NSIS_UNINSTALLEXE">
|
||||
<DirectorySearch Id="LegacyUninstallVersion" Path="[INSTALLDIR]">
|
||||
<FileSearch Name="Uninstall.exe" />
|
||||
</DirectorySearch>
|
||||
</Property>
|
||||
|
||||
<!-- Quit / restart application -->
|
||||
<util:RestartResource ProcessName="$(var.AppExe)" />
|
||||
|
||||
<!-- Helper DLL Custom Actions -->
|
||||
<SetProperty Id="ExecNsisUninstaller" Value=""$(var.AppShortName)" "[NSIS_UNINSTALLEXE]"" Before="ExecNsisUninstaller" Sequence="execute" />
|
||||
<SetProperty Id="RemoveNavigationPaneEntries" Value=""$(var.AppName)"" Before="RemoveNavigationPaneEntries" Sequence="execute" />
|
||||
|
||||
<InstallExecuteSequence>
|
||||
<!-- Install: Remove previous NSIS installation, if detected -->
|
||||
<Custom Action="ExecNsisUninstaller" Before="ProcessComponents">NSIS_UNINSTALLEXE AND NOT Installed</Custom>
|
||||
|
||||
<!-- Uninstall: Remove sync folders from Explorer's Navigation Pane, only effective for the current user (home users) -->
|
||||
<Custom Action="RemoveNavigationPaneEntries" After="RemoveFiles">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
|
||||
|
||||
<!-- Schedule Reboot for the Shell Extensions -->
|
||||
<ScheduleReboot After="InstallFinalize">NOT (DO_NOT_SCHEDULE_REBOOT=1)</ScheduleReboot>
|
||||
</InstallExecuteSequence>
|
||||
|
||||
<!-- "Add or Remove" Programs Entries -->
|
||||
<Property Id="ARPPRODUCTICON">$(var.AppIcon)</Property>
|
||||
<Property Id="ARPHELPLINK">$(var.AppHelpLink)</Property>
|
||||
<Property Id="ARPURLINFOABOUT">$(var.AppInfoLink)</Property>
|
||||
|
||||
<!-- https://www.firegiant.com/wix/tutorial/com-expression-syntax-miscellanea/add-or-remove-programs-entries/ -->
|
||||
<!--
|
||||
<Property Id="ARPNOMODIFY">1</Property>
|
||||
<Property Id="ARPNOREPAIR">1</Property>
|
||||
-->
|
||||
|
||||
<!-- App icon -->
|
||||
<Icon Id="$(var.AppIcon)" SourceFile="$(var.HarvestAppDir)\$(var.AppIcon)" />
|
||||
|
||||
<!-- Custom bitmaps -->
|
||||
<WixVariable Id="WixUIBannerBmp" Value="$(var.UIBannerBmp)" />
|
||||
<WixVariable Id="WixUIDialogBmp" Value="$(var.UIDialogBmp)" />
|
||||
|
||||
<!-- Custom icons -->
|
||||
<!-- https://wixtoolset.org/documentation/manual/v3/wixui/wixui_customizations.html -->
|
||||
<!--
|
||||
<WixVariable Id="WixUIExclamationIco" Value="ui\Exclam.ico" />
|
||||
<WixVariable Id="WixUIInfoIco" Value="ui\Info.ico" />
|
||||
<WixVariable Id="WixUINewIco" Value="ui\New.ico" />
|
||||
<WixVariable Id="WixUIUpIco" Value="ui\Up.ico" />
|
||||
-->
|
||||
|
||||
<!-- Custom license -->
|
||||
<!--
|
||||
<WixVariable Id="WixUILicenseRtf" Value="$(var.AppLicenseRtf)" />
|
||||
-->
|
||||
|
||||
<UI>
|
||||
<UIRef Id="WixUI_FeatureTree" />
|
||||
<UIRef Id="WixUI_ErrorProgressText" />
|
||||
|
||||
<!-- Skip the license page -->
|
||||
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="CustomizeDlg" Order="3">1</Publish>
|
||||
<!-- Skip the page on the way back too -->
|
||||
<Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3">1</Publish>
|
||||
|
||||
<!-- https://wixtoolset.org/documentation/manual/v3/howtos/ui_and_localization/run_program_after_install.html -->
|
||||
<Publish Dialog="ExitDialog"
|
||||
Control="Finish"
|
||||
Event="DoAction"
|
||||
Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
|
||||
|
||||
<ProgressText Action="ExecNsisUninstaller">Removing previous installation</ProgressText>
|
||||
<ProgressText Action="KillProcess">Trying to terminate application process of previous installation</ProgressText>
|
||||
<ProgressText Action="RemoveNavigationPaneEntries">Removing sync folders from Explorer's Navigation Pane</ProgressText>
|
||||
</UI>
|
||||
|
||||
<!-- "Launch" checkbox -->
|
||||
<Property Id="WixShellExecTarget" Value="[#MainExecutable]" />
|
||||
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
|
||||
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch $(var.AppName)" />
|
||||
<SetProperty Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" Before="CostInitialize">NOT (LAUNCH=0)</SetProperty>
|
||||
|
||||
<!-- Components -->
|
||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
||||
<Directory Id="$(var.PlatformProgramFilesFolder)" Name="PFiles">
|
||||
<Directory Id="INSTALLDIR" Name="$(var.AppName)">
|
||||
<!-- Shell Extensions -->
|
||||
<Directory Id="ShellExtDir" Name="shellext" />
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<Directory Id="ProgramMenuFolder" Name="Programs">
|
||||
<!-- Start Menu Shortcut -->
|
||||
<Component Id="StartMenuIcon" Guid="*" Win64="$(var.PlatformWin64)">
|
||||
<Shortcut Id="StartMenu" Name="$(var.AppName)" Target="[INSTALLDIR]$(var.AppExe)" WorkingDirectory="INSTALLDIR" Icon="$(var.AppIcon)" IconIndex="0" Advertise="no" />
|
||||
<RegistryValue Root="HKCU" Key="Software\$(var.AppVendor)\$(var.AppName)" Name="installedStartMenuShortcut" Type="integer" Value="1" KeyPath="yes"/>
|
||||
</Component>
|
||||
</Directory>
|
||||
|
||||
<Directory Id="DesktopFolder" Name="Desktop">
|
||||
<!-- Desktop Shortcut -->
|
||||
<Component Id="DesktopIcon" Guid="*" Win64="$(var.PlatformWin64)">
|
||||
<Shortcut Id="Desktop" Name="$(var.AppName)" Target="[INSTALLDIR]$(var.AppExe)" WorkingDirectory="INSTALLDIR" Icon="$(var.AppIcon)" IconIndex="0" Advertise="no" />
|
||||
<RegistryValue Root="HKCU" Key="Software\$(var.AppVendor)\$(var.AppName)" Name="installedDesktopShortcut" Type="integer" Value="1" KeyPath="yes"/>
|
||||
</Component>
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<DirectoryRef Id="TARGETDIR">
|
||||
<Component Id="RegistryEntries" Guid="*" Win64="no">
|
||||
<!-- Version numbers used to detect existing installation (use 32-bit registry like NSIS does) -->
|
||||
<RegistryKey Root="HKLM" Key="Software\$(var.AppVendor)\$(var.AppName)" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
|
||||
<RegistryValue Type="string" Value="[INSTALLDIR]" />
|
||||
<RegistryValue Type="integer" Name="VersionMajor" Value="$(var.VerMajor)" />
|
||||
<RegistryValue Type="integer" Name="VersionMinor" Value="$(var.VerMinor)" />
|
||||
<RegistryValue Type="integer" Name="VersionRevision" Value="$(var.VerRevision)" />
|
||||
<RegistryValue Type="integer" Name="VersionBuild" Value="$(var.VerBuild)" />
|
||||
|
||||
<!-- Save MSI ProductCode to allow being uninstalled by custom tools -->
|
||||
<RegistryValue Type="string" Name="InstallerProductCode" Value="[ProductCode]" />
|
||||
</RegistryKey>
|
||||
</Component>
|
||||
</DirectoryRef>
|
||||
|
||||
<!-- Features -->
|
||||
<Feature Id="Client" Title="$(var.AppName) $(var.PlatformBitness)" Display="collapse" Absent="disallow" ConfigurableDirectory="INSTALLDIR"
|
||||
Description="$(var.AppName) $(var.VerDesc)">
|
||||
<ComponentGroupRef Id="ClientFiles" />
|
||||
|
||||
<ComponentRef Id="RegistryEntries" />
|
||||
|
||||
<Feature Id="ShellExtensions" Title="Integration for Windows Explorer"
|
||||
Description="This feature requires a reboot." >
|
||||
<ComponentGroupRef Id="ShellExtensions" />
|
||||
|
||||
<Condition Level="0">(NO_SHELL_EXTENSIONS=1)</Condition>
|
||||
</Feature>
|
||||
|
||||
<Feature Id="StartMenuShortcut" Title="Start Menu Shortcut">
|
||||
<ComponentRef Id="StartMenuIcon" />
|
||||
<Condition Level="0">(NO_START_MENU_SHORTCUTS=1)</Condition>
|
||||
</Feature>
|
||||
|
||||
<Feature Id="DesktopShortcut" Title="Desktop Shortcut">
|
||||
<ComponentRef Id="DesktopIcon" />
|
||||
<Condition Level="0">(NO_DESKTOP_SHORTCUT=1)</Condition>
|
||||
</Feature>
|
||||
</Feature>
|
||||
|
||||
</Product>
|
||||
</Wix>
|
||||
54
admin/win/msi/OEM.wxi.in
Normal file
54
admin/win/msi/OEM.wxi.in
Normal file
@@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
-->
|
||||
<Include>
|
||||
|
||||
<!-- Changing the Vendor breaks registry (also NSIS) product detection -->
|
||||
<?define AppVendor = "@APPLICATION_VENDOR@" ?>
|
||||
|
||||
<!-- App Defines -->
|
||||
<?define AppName = "@APPLICATION_NAME@" ?>
|
||||
<?define AppShortName = "@APPLICATION_EXECUTABLE@" ?>
|
||||
|
||||
<?define AppIcon = "@APPLICATION_ICON_NAME@.ico" ?>
|
||||
<?define AppExe = "@APPLICATION_EXECUTABLE@.exe" ?>
|
||||
|
||||
<?define AppHelpLink = "https://@APPLICATION_DOMAIN@/" ?>
|
||||
<?define AppInfoLink = "$(var.AppHelpLink)" ?>
|
||||
|
||||
<!-- Custom license: To use it, also remove the "Skip the license page" stuff in the <UI> section
|
||||
and uncomment <WixVariable Id="WixUILicenseRtf"...
|
||||
<?define AppLicenseRtf = "path\License.rtf" ?>
|
||||
-->
|
||||
|
||||
<!-- App Version -->
|
||||
<?define VerMajor = "@MIRALL_VERSION_MAJOR@" ?>
|
||||
<?define VerMinor = "@MIRALL_VERSION_MINOR@" ?>
|
||||
<?define VerRevision = "@MIRALL_VERSION_PATCH@" ?>
|
||||
<?define VerBuild = "@MIRALL_VERSION_BUILD@" ?>
|
||||
<?define VerStd = "$(var.VerMajor).$(var.VerMinor).$(var.VerRevision)" ?>
|
||||
<?define VerFull = "$(var.VerStd).$(var.VerBuild)" ?>
|
||||
|
||||
<?define VerDesc = "@MIRALL_VERSION_STRING@ (Git revision @GIT_REVISION@)" ?>
|
||||
|
||||
<!-- MSI upgrade support -->
|
||||
<?define UpgradeCode = "@WIN_MSI_UPGRADE_CODE@" ?>
|
||||
|
||||
<!-- UI resources -->
|
||||
<?define UIBannerBmp = "banner.bmp" ?>
|
||||
<?define UIDialogBmp = "dialog.bmp" ?>
|
||||
|
||||
</Include>
|
||||
38
admin/win/msi/Platform.wxi
Normal file
38
admin/win/msi/Platform.wxi
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
-->
|
||||
<Include>
|
||||
|
||||
<!--
|
||||
MSI packages are built either for x86 or x64, we use defines to maintain a single WiX script.
|
||||
|
||||
Some hints:
|
||||
https://www.joyofsetup.com/2010/05/14/working-hard-or-hardly-working/
|
||||
https://stackoverflow.com/questions/18628790/build-wix-3-6-project-targeting-x64
|
||||
https://www.howtobuildsoftware.com/index.php/how-do/1oQ/wix-detect-if-32-or-64-bit-windows-and-define-var
|
||||
-->
|
||||
|
||||
<?if $(var.Platform) = x64 ?>
|
||||
<?define PlatformBitness = "(64-bit)" ?>
|
||||
<?define PlatformWin64 = "yes" ?>
|
||||
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
|
||||
<?else ?>
|
||||
<?define PlatformBitness = "(32-bit)" ?>
|
||||
<?define PlatformWin64 = "no" ?>
|
||||
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
|
||||
<?endif ?>
|
||||
|
||||
</Include>
|
||||
44
admin/win/msi/collect-transform.xsl.in
Normal file
44
admin/win/msi/collect-transform.xsl.in
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
|
||||
|
||||
<xsl:output method="xml" indent="yes" />
|
||||
|
||||
<!-- Copy all attributes and elements to the output. -->
|
||||
<xsl:template match="@*|*">
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@*" />
|
||||
<xsl:apply-templates select="*" />
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Identify MainExecutable -->
|
||||
<xsl:key name="exe-search" match="wix:File[contains(@Source, '@APPLICATION_EXECUTABLE@.exe')]" use="@Id" />
|
||||
<xsl:template match="wix:File[key('exe-search', @Id)]">
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@*" />
|
||||
<xsl:attribute name="Id">
|
||||
<xsl:text>MainExecutable</xsl:text>
|
||||
</xsl:attribute>
|
||||
<xsl:apply-templates/>
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Exclude Shell Extensions -->
|
||||
<xsl:key name="shellext-search" match="wix:Component[contains(wix:File/@Source, 'shellext')]" use="@Id" />
|
||||
<xsl:template match="wix:Component[key('shellext-search', @Id)]" />
|
||||
<xsl:template match="wix:ComponentRef[key('shellext-search', @Id)]" />
|
||||
|
||||
<xsl:key name="shellext-search" match="wix:Directory[contains(@Name, 'shellext')]" use="@Id" />
|
||||
<xsl:template match="wix:Directory[key('shellext-search', @Id)]" />
|
||||
|
||||
<!-- Exclude VC Redist -->
|
||||
<xsl:key name="vc-redist-32-search" match="wix:Component[contains(wix:File/@Source, 'vc_redist.x86.exe')]" use="@Id" />
|
||||
<xsl:template match="wix:Component[key('vc-redist-32-search', @Id)]" />
|
||||
<xsl:template match="wix:ComponentRef[key('vc-redist-32-search', @Id)]" />
|
||||
|
||||
<xsl:key name="vc-redist-64-search" match="wix:Component[contains(wix:File/@Source, 'vc_redist.x64.exe')]" use="@Id" />
|
||||
<xsl:template match="wix:Component[key('vc-redist-64-search', @Id)]" />
|
||||
<xsl:template match="wix:ComponentRef[key('vc-redist-64-search', @Id)]" />
|
||||
</xsl:stylesheet>
|
||||
BIN
admin/win/msi/gui/banner.bmp
Normal file
BIN
admin/win/msi/gui/banner.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 84 KiB |
72
admin/win/msi/gui/banner.svg
Normal file
72
admin/win/msi/gui/banner.svg
Normal file
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 462.18754 54.374996"
|
||||
enable-background="new 0 0 196.6 72"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.0 (4035a4f, 2020-05-01)"
|
||||
sodipodi:docname="banner.svg"
|
||||
width="493"
|
||||
height="58"
|
||||
inkscape:export-filename="/Users/misch/nextcloud/_icon/_msi/banner.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"><metadata
|
||||
id="metadata20"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs18"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath8812"><circle
|
||||
id="circle8814"
|
||||
cx="95.669289"
|
||||
cy="95.669296"
|
||||
r="79.724197"
|
||||
style="fill:#00080d;fill-opacity:1;stroke-width:1" /></clipPath></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="812"
|
||||
id="namedview16"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.3964178"
|
||||
inkscape:cx="264.97589"
|
||||
inkscape:cy="100.72146"
|
||||
inkscape:current-layer="Layer_1"
|
||||
fit-margin-top="10"
|
||||
fit-margin-left="10"
|
||||
fit-margin-right="10"
|
||||
fit-margin-bottom="10"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="23"
|
||||
inkscape:window-maximized="1"
|
||||
units="px"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:document-rotation="0" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1052"
|
||||
d="m 411.83858,10.876373 c -7.55537,0 -13.95917,5.122046 -15.94393,12.061838 -1.72495,-3.680971 -5.463,-6.259801 -9.76856,-6.259801 -5.92119,0 -10.78856,4.867369 -10.78856,10.78855 0,5.921172 4.86737,10.790763 10.78856,10.790763 4.30556,0 8.04361,-2.580407 9.76856,-6.262024 1.98476,6.94032 8.38856,12.064068 15.94393,12.064068 7.49951,0 13.87065,-5.046471 15.90617,-11.908511 1.75682,3.598038 5.4486,6.106467 9.69302,6.106467 5.92118,0 10.79076,-4.869591 10.79076,-10.790763 0,-5.921181 -4.86958,-10.78855 -10.79076,-10.78855 -4.24442,0 -7.9362,2.506858 -9.69302,6.10425 -2.03552,-6.861503 -8.40666,-11.906287 -15.90617,-11.906287 z m 0,6.333131 c 5.70346,0 10.25968,4.554019 10.25968,10.257456 0,5.703427 -4.55622,10.259672 -10.25968,10.259672 -5.70341,0 -10.25743,-4.556245 -10.25743,-10.259672 0,-5.703437 4.55402,-10.257454 10.25743,-10.257456 z m -25.71249,5.802039 c 2.4988,0 4.45763,1.9566 4.45763,4.455417 0,2.498807 -1.95883,4.457631 -4.45763,4.457631 -2.49882,0 -4.45544,-1.958824 -4.45544,-4.457631 0,-2.498817 1.95662,-4.455417 4.45544,-4.455417 z m 51.31168,0 c 2.49883,0 4.45764,1.9566 4.45764,4.455417 0,2.498807 -1.95883,4.457631 -4.45764,4.457631 -2.49879,0 -4.45541,-1.958824 -4.45541,-4.457631 0,-2.498817 1.95662,-4.455417 4.45541,-4.455417 z"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#0082c9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.56218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
inkscape:export-filename="Nextcloud Hub logo variants.png"
|
||||
inkscape:export-xdpi="300"
|
||||
inkscape:export-ydpi="300" /></svg>
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
BIN
admin/win/msi/gui/dialog.bmp
Normal file
BIN
admin/win/msi/gui/dialog.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 454 KiB |
26
admin/win/msi/make-msi.bat.in
Normal file
26
admin/win/msi/make-msi.bat.in
Normal file
@@ -0,0 +1,26 @@
|
||||
@echo off
|
||||
set HarvestAppDir=%~1
|
||||
set BuildArch=@MSI_BUILD_ARCH@
|
||||
|
||||
if "%HarvestAppDir%" == "" (
|
||||
echo "Missing parameter: Please specify file collection source path (HarvestAppDir)."
|
||||
exit 1
|
||||
)
|
||||
|
||||
if "%WIX%" == "" (
|
||||
echo "WiX Toolset path not set (environment variable 'WIX'). Please install the WiX Toolset."
|
||||
exit 1
|
||||
)
|
||||
|
||||
Rem Generate collect.wxs
|
||||
"%WIX%\bin\heat.exe" dir "%HarvestAppDir%" -dr INSTALLDIR -sreg -srd -sfrag -ag -cg ClientFiles -var var.HarvestAppDir -platform='%BuildArch%' -t collect-transform.xsl -out collect.wxs
|
||||
if %ERRORLEVEL% neq 0 exit %ERRORLEVEL%
|
||||
|
||||
Rem Compile en-US (https://www.firegiant.com/wix/tutorial/transforms/morphing-installers/)
|
||||
"%WIX%\bin\candle.exe" -dcodepage=1252 -dPlatform=%BuildArch% -arch %BuildArch% -dHarvestAppDir="%HarvestAppDir%" -ext WixUtilExtension NCMsiHelper.wxs WinShellExt.wxs collect.wxs Nextcloud.wxs
|
||||
if %ERRORLEVEL% neq 0 exit %ERRORLEVEL%
|
||||
|
||||
Rem Link MSI package
|
||||
"%WIX%\bin\light.exe" -sw1076 -ext WixUIExtension -ext WixUtilExtension -cultures:en-us NCMsiHelper.wixobj WinShellExt.wixobj collect.wixobj Nextcloud.wixobj -out "@MSI_INSTALLER_FILENAME@"
|
||||
|
||||
exit %ERRORLEVEL%
|
||||
@@ -1,48 +0,0 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[owncloud.client-nsis]
|
||||
host = https://www.transifex.com
|
||||
source_file = pofiles/messages.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
minimum_perc = 5
|
||||
|
||||
# simple one-to-one language mappings
|
||||
trans.ca = pofiles/ca.po
|
||||
trans.el = pofiles/el.po
|
||||
trans.es_AR = pofiles/es_AR.po
|
||||
trans.es = pofiles/es.po
|
||||
trans.eu = pofiles/eu.po
|
||||
trans.fa = pofiles/fa.po
|
||||
trans.fr = pofiles/fr.po
|
||||
trans.gl = pofiles/gl.po
|
||||
trans.it = pofiles/it.po
|
||||
trans.nb_NO = pofiles/nb_NO.po
|
||||
trans.nl = pofiles/nl.po
|
||||
trans.pl = pofiles/pl.po
|
||||
trans.pt_BR = pofiles/pt_BR.po
|
||||
trans.ru = pofiles/ru.po
|
||||
trans.sl = pofiles/sl.po
|
||||
trans.sv = pofiles/sv.po
|
||||
trans.tr = pofiles/tr.po
|
||||
trans.uk = pofiles/uk.po
|
||||
trans.zh_CN = pofiles/zh_CN.po
|
||||
trans.zh_TW = pofiles/zh_TW.po
|
||||
|
||||
# special handling below
|
||||
|
||||
# de_DE holds the formal translation which we want as default
|
||||
trans.de_DE = pofiles/de.po
|
||||
|
||||
# choose one of the given translations on transifex as default
|
||||
trans.pt_PT = pofiles/pt.po
|
||||
|
||||
# choose a special language as more generic default
|
||||
trans.cs_CZ = pofiles/cs.po
|
||||
trans.et_EE = pofiles/et.po
|
||||
trans.fi_FI = pofiles/fi.po
|
||||
trans.hu_HU = pofiles/hu.po
|
||||
trans.ja_JP = pofiles/ja.po
|
||||
trans.sk_SK = pofiles/sk.po
|
||||
trans.th_TH = pofiles/th.po
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Erakutsi bertsio-berritze oharrak"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Gelditu beharreko ${APPLICATION_EXECUTABLE} prozesua(k) aurkitu dira.$\nNahi duzu instalatzaileak zure partetik hauek gelditzea?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "${APPLICATION_EXECUTABLE} prozesuak hiltzen."
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
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}."
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
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_KILLING_PROCESSES_TEXT "UkonŸuji procesy ${APPLICATION_EXECUTABLE}."
|
||||
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 $PageReinstall_NEW_Field_3 "Neodinstalov vat"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ji§ nainstalov no"
|
||||
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_KILLING_PROCESSES_TEXT "Ukončuji procesy ${APPLICATION_EXECUTABLE}."
|
||||
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 $PageReinstall_NEW_Field_3 "Neodinstalovávat"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Již nainstalováno"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Zvolte, jak chcete ${APPLICATION_NAME} nainstalovat."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "NovØjç¡ verze aplikace ${APPLICATION_NAME} je ji§ nainstalov na. Instalace starç¡ verze se nedoporuŸuje. Pokud opravdu chcete tuto starç¡ verzi nainstalovat, je lepç¡ nejprve odinstalovat souŸasnou verzi. Zvolte po§adovanou operaci a kliknØte na Dalç¡ pro pokraŸov n¡."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je ji§ nainstalov na.$\n$\nZvolte po§adovanou operaci a kliknØte na Dalç¡ pro pokraŸov n¡."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Pýidat Ÿi znovu instalovat komponenty"
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Novější verze aplikace ${APPLICATION_NAME} je již nainstalována. Instalace starší verze se nedoporučuje. Pokud opravdu chcete tuto starší verzi nainstalovat, je lepší nejprve odinstalovat současnou verzi. Zvolte požadovanou operaci a klikněte na Další pro pokračování."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je již nainstalována.$\n$\nZvolte požadovanou operaci a klikněte na Další pro pokračování."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Přidat či znovu instalovat komponenty"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Odinstalovat ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstalovat ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Vyberte mo§nost £dr§by k proveden¡."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Instaluj¡ se n le§itosti ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integrace do pr…zkumn¡ka Windows"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalace integrace do pr…zkumn¡ka Windows"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Z stupce v Nab¡dce Start"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Pýid v m z stupce pro ${APPLICATION_NAME} do Nab¡dky Start."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Z stupce na ploçe"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Vytv ý¡m z stupce na ploçe"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Z stupce v panelu rychl‚ho spuçtØn¡"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Vytv ý¡m z stupce v panelu rychl‚ho spuçtØn¡"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "N le§itosti ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Z stupce ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Z stupce na ploçe pro ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Z stupce rychl‚ho spuçtØn¡ pro ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisuji odinstal tor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisuji instal tor do registr…"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "DokonŸeno"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Nezd se, §e ${APPLICATION_NAME} je nainstalov na v adres ýi '$INSTDIR'.$\n$\nChcete pokraŸovat (nedoporuŸuje se)?"
|
||||
StrCpy $UNINSTALL_ABORT "Odinstalace zruçena u§ivatelem"
|
||||
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 $UAC_ERROR_LOGON_SERVICE "Slu§ba pýihl çen¡ nebا¡, ukonŸuji!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Odinstal tor je ji§ spuçtØn."
|
||||
StrCpy $SectionGroup_Shortcuts "Z stupci"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Vyberte možnost údržby k provedení."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Instalují se náležitosti ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integrace do průzkumníka Windows"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalace integrace do průzkumníka Windows"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Zástupce v Nabídce Start"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Přidávám zástupce pro ${APPLICATION_NAME} do Nabídky Start."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Zástupce na ploše"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Vytvářím zástupce na ploše"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Zástupce v panelu rychlého spuštění"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Vytvářím zástupce v panelu rychlého spuštění"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Náležitosti ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Zástupce ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Zástupce na ploše pro ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Zástupce rychlého spuštění pro ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisuji odinstalátor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisuji instalátor do registrů"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Dokončeno"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Nezdá se, že ${APPLICATION_NAME} je nainstalována v adresáři '$INSTDIR'.$\n$\nChcete pokračovat (nedoporučuje se)?"
|
||||
StrCpy $UNINSTALL_ABORT "Odinstalace zrušena uživatelem"
|
||||
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 $UAC_ERROR_LOGON_SERVICE "Služba přihlášení neběží, ukončuji!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Odinstalátor je již spuštěn."
|
||||
StrCpy $SectionGroup_Shortcuts "Zástupci"
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Toon opmerkingen bij deze versie"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Gevonden ${APPLICATION_EXECUTABLE} proces(sen) moet worden gestopt.$\nWilt u dat het installatieprogramma dat voor u doet?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Stoppen ${APPLICATION_EXECUTABLE} processen."
|
||||
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_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 "Verwijder oude versie"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Behoud oude versie"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Al geïnstalleerd"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Al geïnstalleerd"
|
||||
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.$\n$\nKies de actie die u uit wil voeren en druk op Verder om door te gaan."
|
||||
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.$\n$\nKies de actie die u uit wil voeren en druk op Verder om door te gaan."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Toevoegen/herinstalleren componenten"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "De-installeer ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "De-installeer ${APPLICATION_NAME}"
|
||||
@@ -30,7 +29,7 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Snelstart snelkoppeling voor ${APPL
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Wegschrijven Uninstaller"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Wegschrijven installer Registersleutels"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Klaar"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Het lijkt er niet op dat ${APPLICATION_NAME} is geïnstalleerd in de map '$INSTDIR'.$\n$\nToch doorgaan (niet aangeraden)?"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Het lijkt er niet op dat ${APPLICATION_NAME} is geïnstalleerd in de map '$INSTDIR'.$\n$\nToch doorgaan (niet aangeraden)?"
|
||||
StrCpy $UNINSTALL_ABORT "De-installatie afgebroken door de gebruiker"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Snelstart snelkoppeling (N/A)"
|
||||
StrCpy $INIT_NO_DESKTOP "Bureaublad snelkoppeling (overschrijft huidige)"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Show release notes"
|
||||
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_KILLING_PROCESSES_TEXT "Killing ${APPLICATION_EXECUTABLE} processes."
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Näita väljalaske märkmeid"
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Näita väljalaske märkmeid"
|
||||
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_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_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 $PageReinstall_NEW_Field_3 "Ära paigalda"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Ära paigalda"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Juba paigaldatud"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vali, kuidas sa soovid paigaldada ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Uuem versioon ${APPLICATION_NAME} on juba paigaldatud! Vanema versiooni paigaldus ei ole soovitatav. Kui tõesti tahad paigaldada vanemat versiooni, siis on parem esmalt eemaldada olemasolev. Vali tehtav toiming ning kliki Jätka."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} on juba paigaldatud.$\n$\nVali toiming, mida sa tahad sooritada ning kliki jätkamiseks nuppu Next."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Uuem versioon ${APPLICATION_NAME} on juba paigaldatud! Vanema versiooni paigaldus ei ole soovitatav. Kui tõesti tahad paigaldada vanemat versiooni, siis on parem esmalt eemaldada olemasolev. Vali tehtav toiming ning kliki Jätka."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} on juba paigaldatud.$\n$\nVali toiming, mida sa tahad sooritada ning kliki jätkamiseks nuppu Next."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Lisa/Taaspaigalda komponente"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalli ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalli ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Vali hooldustegevus, mida sa soovid sooritada."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Paigaldan ${APPLICATION_NAME} põhiosa."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Paigaldan ${APPLICATION_NAME} põhiosa."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integreerimine Windows Exploreriga"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Paigalda Windows Exploreriga integreerimine"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Start Menüü programmide otsetee"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Lisan ${APPLICATION_NAME} otsetee Start menüüsse."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Töölaua otsetee"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Töölaua otseteede loomine"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Start Menüü programmide otsetee"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Lisan ${APPLICATION_NAME} otsetee Start menüüsse."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Töölaua otsetee"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Töölaua otseteede loomine"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Kiirvaliku otsetee"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Kiirvaliku otsetee loomine"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} põhiosa."
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} põhiosa."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} otsetee."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Töölaua otsetee rakendusele ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Töölaua otsetee rakendusele ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Kiirvaliku otsetee rakendusele ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Desinstallija kirjutamine"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Kirjutan paigaldaja registri võtmeid"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Lõpetatud"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Ei leia, et ${APPLICATION_NAME} oleks paigaldatud kataloogi '$INSTDIR'.$\n$\nJätkata sellele vaatamata (pole soovitav)?"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Kirjutan paigaldaja registri võtmeid"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Lõpetatud"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Ei leia, et ${APPLICATION_NAME} oleks paigaldatud kataloogi '$INSTDIR'.$\n$\nJätkata sellele vaatamata (pole soovitav)?"
|
||||
StrCpy $UNINSTALL_ABORT "Desinstallimine on kasutaja poolt katkestatud"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Kiirvaliku otsetee (N/A)"
|
||||
StrCpy $INIT_NO_DESKTOP "Ikoon töölaual (kirjutab olemasoleva üle)"
|
||||
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 $UAC_ERROR_LOGON_SERVICE "Sisselogimisteenus ei tööta, katkestamine!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "See desinstallija on juba käimas."
|
||||
StrCpy $INIT_NO_DESKTOP "Ikoon töölaual (kirjutab olemasoleva üle)"
|
||||
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 $UAC_ERROR_LOGON_SERVICE "Sisselogimisteenus ei tööta, katkestamine!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "See desinstallija on juba käimas."
|
||||
StrCpy $SectionGroup_Shortcuts "Otseteed"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "نمایش پادداشت های انتشار نسخه"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "${APPLICATION_EXECUTABLE} پردازش (ها) که باید متوقف شوند را پیدا کرد. $\nآیا میخواهیم برنامه نصاب این پردازشها را برای شما متوقف کند ؟"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "حذف پردازشهای ${APPLICATION_EXECUTABLE}."
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Näytä julkaisutiedot"
|
||||
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_KILLING_PROCESSES_TEXT "Pysäytetään sovelluksen ${APPLICATION_EXECUTABLE} prosessit."
|
||||
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 $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Näytä julkaisutiedot"
|
||||
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_KILLING_PROCESSES_TEXT "Pysäytetään sovelluksen ${APPLICATION_EXECUTABLE} prosessit."
|
||||
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_Field_3 "Älä poista"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Älä poista"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Asennettu jo"
|
||||
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_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.$\n$\nValitse haluamasi toiminto ja napsauta Seuraava jatkaaksesi."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Lisää/uudelleenasenna komponentteja"
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Lisää/uudelleenasenna komponentteja"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Poista ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Poista ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Valitse suoritettava huoltotoimenpide."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Asennetaan sovelluksen ${APPLICATION_NAME} välttämättömyyksiä."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Asennetaan sovelluksen ${APPLICATION_NAME} välttämättömyyksiä."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integraatio Windows Exploreriin"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Asennetaan integraatiota Windows Exploreriin"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Käynnistä-valikon pikakuvake"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Lisätään ${APPLICATION_NAME}-pikakuvake Käynnistä-valikkoon."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Työpöydän pikakuvake"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Luodaan työpöydän pikakuvakkeet"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Pikakäynnistyksen pikakuvake"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Luodaan pikakuvaketta pikakäynnistykseen"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} välttämättömyydet."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Käynnistä-valikon pikakuvake"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Lisätään ${APPLICATION_NAME}-pikakuvake Käynnistä-valikkoon."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Työpöydän pikakuvake"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Luodaan työpöydän pikakuvakkeet"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Pikakäynnistyksen pikakuvake"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Luodaan pikakuvaketta pikakäynnistykseen"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} välttämättömyydet."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME}-pikakuvake."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Sovelluksen ${APPLICATION_NAME} työpyötäpikakuvake."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Pikakäynnistyksen pikakuvake sovellukselle ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Sovelluksen ${APPLICATION_NAME} työpyötäpikakuvake."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Pikakäynnistyksen pikakuvake sovellukselle ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Kirjoitetaan poisto-ohjelmaa"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Kirjoitetaan asennusohjelman rekisteriavaimia"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Valmis"
|
||||
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 $INIT_NO_QUICK_LAUNCH "Pikakäynnistyksen pikakuvake (-)"
|
||||
StrCpy $INIT_NO_DESKTOP "Työpöydän pikakuvake (korvaa nykyinen)"
|
||||
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 $INIT_NO_QUICK_LAUNCH "Pikakäynnistyksen pikakuvake (-)"
|
||||
StrCpy $INIT_NO_DESKTOP "Työpöydän pikakuvake (korvaa nykyinen)"
|
||||
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 $UAC_ERROR_LOGON_SERVICE "Kirjautumispalvelu ei ole käynnissä, perutaan!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Poisto-ohjelma on jo käynnissä."
|
||||
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 $UAC_ERROR_LOGON_SERVICE "Kirjautumispalvelu ei ole käynnissä, perutaan!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Poisto-ohjelma on jo käynnissä."
|
||||
StrCpy $SectionGroup_Shortcuts "Pikakuvakkeet"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
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}."
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Amosar as notas de publicación"
|
||||
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 $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Amosar as notas de publicación"
|
||||
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 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_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 $PageReinstall_NEW_Field_3 "Non desinstalar"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Xa instalado"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolla como quere instalar ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Ten instalada unha versión actualizada do ${APPLICATION_NAME}! recomendámoslle que non instale unha versión anterior. Se realmente quere instalar esta versión máis antiga, é preferíbel que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Engadir/reinstalar compoñentes"
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Ten instalada unha versión actualizada do ${APPLICATION_NAME}! recomendámoslle que non instale unha versión anterior. Se realmente quere instalar esta versión máis antiga, é preferíbel que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Engadir/reinstalar compoñentes"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Escolla a opción de mantemento a realizar."
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Escolla a opción de mantemento a realizar."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Instalando ${APPLICATION_NAME} esenciais."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integración con Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalando a integración con Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Acceso directo ao programa no menú de inicio"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Engadindo o acceso directo a ${APPLICATION_NAME} no menú de inicio"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integración con Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalando a integración con Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Acceso directo ao programa no menú de inicio"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Engadindo o acceso directo a ${APPLICATION_NAME} no menú de inicio"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Acceso directo no escritorio"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Creando os accesos directos no escritorio"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Acceso de inicio rápido"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Creando o acceso de inicio rápido"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Acceso de inicio rápido"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Creando o acceso de inicio rápido"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} esenciais."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Acceso directo ao ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Acceso directo no escritorio para "
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Acceso de inicio rápido para ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Acceso de inicio rápido para ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Escribindo o desinstalador"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Escribindo o instalador nas chaves do rexistro"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Rematado"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Semella que ${APPLICATION_NAME} non está instalado no directorio «$INSTDIR».$\n$\nContinuar aínda así (non recomendado)?"
|
||||
StrCpy $UNINSTALL_ABORT "A desinstalación foi interrompida polo usuario."
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Acceso de inicio rápido (n/d)"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Semella que ${APPLICATION_NAME} non está instalado no directorio «$INSTDIR».$\n$\nContinuar aínda así (non recomendado)?"
|
||||
StrCpy $UNINSTALL_ABORT "A desinstalación foi interrompida polo usuario."
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Acceso de inicio rápido (n/d)"
|
||||
StrCpy $INIT_NO_DESKTOP "Atallo no escritorio (sobrescribe o existente)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Non foi posíbel elevalo, erro:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este instalador require acceso de administrador, ténteo de novo"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "O instalador xa está en execución."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador require acceso de administrador, ténteo de novo"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "O servizo de acceso non está en execución, cancelando!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador xa está en execución."
|
||||
StrCpy $UAC_ERROR_ELEVATE "Non foi posíbel elevalo, erro:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este instalador require acceso de administrador, ténteo de novo"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "O instalador xa está en execución."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador require acceso de administrador, ténteo de novo"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "O servizo de acceso non está en execución, cancelando!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador xa está en execución."
|
||||
StrCpy $SectionGroup_Shortcuts "Atallos"
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Release-Informationen anzeigen"
|
||||
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_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_KILLING_PROCESSES_TEXT "Stoppe ${APPLICATION_EXECUTABLE} Prozess(e)."
|
||||
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 $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 $PageReinstall_NEW_Field_2 "Vor der Installation entfernen"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Nicht entfernen"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Bereits installiert"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wählen Sie die Methode, mit der sie ${APPLICATION_NAME} installieren wollen."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Eine neuere Version von ${APPLICATION_NAME} ist bereits installiert! Es wird nicht empfohlen, eine ältere Version zu installieren. Wollen Sie dies trotzdem tun, so sollten Sie die aktuelle Version zunächst entfernen. Wählen Sie eine Vorgehensweise und wählen dann $\"Weiter$\"."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ist bereits installiert. $\nWählen Sie eine Vorgehensweise und klicken Sie auf $\"Weiter$\"."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Komponenten hinzufügen"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wählen Sie die Methode, mit der sie ${APPLICATION_NAME} installieren wollen."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Eine neuere Version von ${APPLICATION_NAME} ist bereits installiert! Es wird nicht empfohlen, eine ältere Version zu installieren. Wollen Sie dies trotzdem tun, so sollten Sie die aktuelle Version zunächst entfernen. Wählen Sie eine Vorgehensweise und wählen dann $\"Weiter$\"."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ist bereits installiert. $\nWählen Sie eine Vorgehensweise und klicken Sie auf $\"Weiter$\"."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Komponenten hinzufügen"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} entfernen"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} entfernen"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Wählen Sie zur Ausführung die Wartungsoption."
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Wählen Sie zur Ausführung die Wartungsoption."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Installiere ${APPLICATION_NAME} Basis."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration in den Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installiere Integration in den Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Installiere Verknüpfung im Programmmenü"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Füge Verknüpfung für ${APPLICATION_NAME} dem Startmenü hinzu."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Desktop-Verknüpfung"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Erstellt Desktop-Verknüpfung"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Schnellstart-Verknüpfung"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Erstelle Schnellstart-Verknüpfung"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Installiere Verknüpfung im Programmmenü"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Füge Verknüpfung für ${APPLICATION_NAME} dem Startmenü hinzu."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Desktop-Verknüpfung"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Erstellt Desktop-Verknüpfung"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Schnellstart-Verknüpfung"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Erstelle Schnellstart-Verknüpfung"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} Basis."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} Verknüfung."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Desktop-Verknüpfung für ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Schnellstart-Verknüpfung für ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} Verknüfung."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Desktop-Verknüpfung für ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Schnellstart-Verknüpfung für ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Schreibe Uninstaller"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Schreibe Registrierungseinträge"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Schreibe Registrierungseinträge"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Abgeschlossen"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Es scheint, als ob ${APPLICATION_NAME} nicht im Verzeichnis '$INSTDIR' installiert ist.$\n$\nTrotzdem fortfahren (nicht empfohlen)?"
|
||||
StrCpy $UNINSTALL_ABORT "Deinstallation vom Benutzer abgebrochen"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Schnellstart-Verknüpfung (Nicht verfügbar)"
|
||||
StrCpy $INIT_NO_DESKTOP "Desktop-Verknüpfung (überschreibt vorhandene)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Rechte können nicht erhöht werden, Fehler:"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Schnellstart-Verknüpfung (Nicht verfügbar)"
|
||||
StrCpy $INIT_NO_DESKTOP "Desktop-Verknüpfung (überschreibt vorhandene)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Rechte können nicht erhöht werden, Fehler:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Dieses Installationsprogramm erfordert Administrator-Rechte, bitte erneut versuchen"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Das Installationsprogramm wird bereits ausgeführt."
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Das Installationsprogramm wird bereits ausgeführt."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Das Deinstallationsprogramm erfordert Administrator-Rechte. Bitte erneut versuchen."
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Anmeldedienst läuft nicht, abbruch!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Das Deinstallationsprogramm wird bereits ausgeführt."
|
||||
StrCpy $SectionGroup_Shortcuts "Verknüpfungen"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Anmeldedienst läuft nicht, abbruch!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Das Deinstallationsprogramm wird bereits ausgeführt."
|
||||
StrCpy $SectionGroup_Shortcuts "Verknüpfungen"
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
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_Field_3 "Να μην απεγκατασταθεί"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ήδη εγκατεστημένη"
|
||||
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_SAME_Field_2 "Προσθήκη/ Επανεγκατάσταση συνιστωσών"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Απεγκατάσταση ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Απεγκατάσταση ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Επιλέξτε την επιλογή συντήρησης που θα πραγματοποιηθεί."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Εγκατάσταση βάσης ${APPLICATION_NAME} σε εξέλιξη."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Ενσωμάτωση στην Εξερεύνηση των Windows"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Εγκατάσταση ενσωμάτωσης στην Εξερεύνηση των Windows"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Συντόμευση στο Αρχικό Μενού"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Προσθήκη συντόμευσης για την ${APPLICATION_NAME} στο Αρχικό Μενού."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Συντόμευση επιφάνειας εργασίας"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Δημιουργία Συντομεύσεων στην Επιφάνεια Εργασίας"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Συντόμευση Ταχείας Εκκίνησης"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Δημιουργία Συντόμευσης Ταχείας Εκκίνησης"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Βάση ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Συντόμευση ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Συντόμευση επιφάνειας εργασίας της ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Συντόμευση Ταχείας Εκκίνησης της ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Εγγραφή Εφαρμογής Απεγκατάστασης"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Εγγραφή Κλειδιών μητρώου (Registry) της Εφαρμογής Εγκατάστασης"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Ολοκληρώθηκε"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Δεν φαίνεται να είναι εγκατεστημένηη η ${APPLICATION_NAME} στον κατάλογο '$INSTDIR'.$\n$\nΣυνέχιση παρ' όλα αυτά (δεν συνίσταται);"
|
||||
StrCpy $UNINSTALL_ABORT "Η απεγκατάσταση ματαιώθηκε από το χρήστη"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Συντόμευση Ταχείας Εκκίνησης (Μ/Δ)"
|
||||
StrCpy $INIT_NO_DESKTOP "Συντόμευση Επιφάνειας Εργασίας (αντικαθιστά υπάρχουσα)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Αδυναμία ανύψωσης, σφάλμα:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Αυτή η εφαρμογή εγκατάστασης απαιτεί πρόσβαση διαχειριστή, δοκιμάστε ξανά"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Η εφαρμογή εγκατάστασης λειτουργεί ήδη."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Αυτή η εφαρμογή απεγκατάστασης απαιτεί πρόσβαση διαχειριστή, δοκιμάστε ξανά"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Η υπηρεσία σύνδεσης δεν εκτελείται, ακύρωση!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Η εφαρμογή απεγκατάστασης λειτουργεί ήδη."
|
||||
StrCpy $SectionGroup_Shortcuts "Συντομεύσεις"
|
||||
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_Field_3 "Να μην απεγκατασταθεί"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ήδη εγκατεστημένη"
|
||||
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_SAME_Field_2 "Προσθήκη/ Επανεγκατάσταση συνιστωσών"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Απεγκατάσταση ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Απεγκατάσταση ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Επιλέξτε την επιλογή συντήρησης που θα πραγματοποιηθεί."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Εγκατάσταση βάσης ${APPLICATION_NAME} σε εξέλιξη."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Ενσωμάτωση στην Εξερεύνηση των Windows"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Εγκατάσταση ενσωμάτωσης στην Εξερεύνηση των Windows"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Συντόμευση στο Αρχικό Μενού"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Προσθήκη συντόμευσης για την ${APPLICATION_NAME} στο Αρχικό Μενού."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Συντόμευση επιφάνειας εργασίας"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Δημιουργία Συντομεύσεων στην Επιφάνεια Εργασίας"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Συντόμευση Ταχείας Εκκίνησης"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Δημιουργία Συντόμευσης Ταχείας Εκκίνησης"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Βάση ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Συντόμευση ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Συντόμευση επιφάνειας εργασίας της ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Συντόμευση Ταχείας Εκκίνησης της ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Εγγραφή Εφαρμογής Απεγκατάστασης"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Εγγραφή Κλειδιών μητρώου (Registry) της Εφαρμογής Εγκατάστασης"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Ολοκληρώθηκε"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Δεν φαίνεται να είναι εγκατεστημένηη η ${APPLICATION_NAME} στον κατάλογο '$INSTDIR'.$\n$\nΣυνέχιση παρ' όλα αυτά (δεν συνίσταται);"
|
||||
StrCpy $UNINSTALL_ABORT "Η απεγκατάσταση ματαιώθηκε από το χρήστη"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Συντόμευση Ταχείας Εκκίνησης (Μ/Δ)"
|
||||
StrCpy $INIT_NO_DESKTOP "Συντόμευση Επιφάνειας Εργασίας (αντικαθιστά υπάρχουσα)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Αδυναμία ανύψωσης, σφάλμα:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Αυτή η εφαρμογή εγκατάστασης απαιτεί πρόσβαση διαχειριστή, δοκιμάστε ξανά"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Η εφαρμογή εγκατάστασης λειτουργεί ήδη."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Αυτή η εφαρμογή απεγκατάστασης απαιτεί πρόσβαση διαχειριστή, δοκιμάστε ξανά"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Η υπηρεσία σύνδεσης δεν εκτελείται, ακύρωση!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Η εφαρμογή απεγκατάστασης λειτουργεί ήδη."
|
||||
StrCpy $SectionGroup_Shortcuts "Συντομεύσεις"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Kiadási jegyzetek megtekintése"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "A következő folyamatot(okat) meg kell állítani ${APPLICATION_EXECUTABLE}.$\nSzeretné ha a telepítő program megállítani ezeket a folyamatokat?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "${APPLICATION_EXECUTABLE} folyamat kilövése."
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostra le note di rilascio"
|
||||
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_KILLING_PROCESSES_TEXT "Sto terminando ${APPLICATION_EXECUTABLE} processi."
|
||||
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 $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"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Non disinstallare"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Già installato"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Già installato"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Scegli come desideri installare ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Una versione più recente di ${APPLICATION_NAME} è già installata! Non è consigliabile installare una versione più vecchia. Se vuoi davvero installare una versione più vecchia, ti consigliamo di rimuovere prima la versione attuale. Scegli l'operazione da eseguire e fai clic su Avanti per continuare."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} è già installato.$\n$\nSeleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare.."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Una versione più recente di ${APPLICATION_NAME} è già installata! Non è consigliabile installare una versione più vecchia. Se vuoi davvero installare una versione più vecchia, ti consigliamo di rimuovere prima la versione attuale. Scegli l'operazione da eseguire e fai clic su Avanti per continuare."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} è già installato.$\n$\nSeleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare.."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Aggiungi/Reinstalla i componenti"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Disinstalla ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Disinstalla ${APPLICATION_NAME}"
|
||||
@@ -36,8 +35,8 @@ StrCpy $INIT_NO_QUICK_LAUNCH "Scorciatoia dell'avvio veloce (N/D)"
|
||||
StrCpy $INIT_NO_DESKTOP "Scorciatoia del desktop (sovrascrivi se esistente)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Impossibile elevare, errore:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Il programma di installazione necessita delle credenziali di amministrazione, riprova"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Il programma di installazione è già in esecuzione."
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Il programma di installazione è già in esecuzione."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Il programma di disinstallazione necessita delle credenziali di amministrazione, riprova"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Il servizio di accesso non è in esecuzione, interruzione in corso!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Il programma di disinstallazione è già in esecuzione."
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Il servizio di accesso non è in esecuzione, interruzione in corso!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Il programma di disinstallazione è già in esecuzione."
|
||||
StrCpy $SectionGroup_Shortcuts "Scorciatoie"
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
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} の旧バージョンがインストールされています。$\n旧バージョンをアンインストールし、最新バージョンをインストールするのをお勧めします。$\nオペレーションを選択し、次へをクリックする。"
|
||||
StrCpy $PageReinstall_NEW_Field_2 "インストール前にアンインストールする"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "アンインストールしない"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "インストール済"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} のインストール方法を選択する"
|
||||
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} の最新バージョンがすでにインストールされています。$\n旧バージョンのインストールはお勧めしません。旧バージョンのインストールが本当に必要な場合は、まず最新バージョンをアンインストールしてから、旧バージョンをインストールしてください。$\nオペレーションを選択し、次へをクリックする。"
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} は、${VERSION} がすでにインストールされています。$\n$\n実行したい操作を選択して、次へをクリックしてください。"
|
||||
StrCpy $PageReinstall_SAME_Field_2 "追加/再インストールコンポーネント"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} をアンインストール"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} をアンインストール"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "実行するには、メンテナンスオプションを選択してください。"
|
||||
StrCpy $SEC_APPLICATION_DETAILS "${APPLICATION_NAME} の重要なパッケージをインストール中"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Windows エクスプローラーへの統合"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Windows エクスプローラーへの統合をインストールしています。"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "スタートメニューショートカット"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "スタートメニューに${APPLICATION_NAME} のショートカットの追加"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "デスクトップショートカット"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "デスクトップショートカット作成"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "クイック起動ショートカット"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "クイック起動ショートカットを作成"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} の重要なパッケージ"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} のショートカット"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME} のデスクトップショートカット"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME} のクイック起動ショートカット"
|
||||
StrCpy $UNINSTALLER_FILE_Detail "アンインストーラーを書き込み"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "インストーラーのレジストリキーの書き込み"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "終了"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "${APPLICATION_NAME} は'$INSTDIR'.$$ ディレクトリにインストールされていません。エラーを無視し、進みますか (非推奨)?"
|
||||
StrCpy $UNINSTALL_ABORT "アンインストールは、ユーザーによって中止されました。"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "クイック起動ショートカット(N/A)"
|
||||
StrCpy $INIT_NO_DESKTOP "デスクトップにショートカットを作成(すでにある場合は上書き)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "エスカレーション不可です、エラー:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "このインストーラーは、管理者権限が必要です。インストールを再試行してください。"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "インストーラーは、すでに起動しています。"
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "このアンインストーラーは、管理者権限が必要です。アンインストールを再試行してください。"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "ログオンサービスが動いていません。中止します。"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "アンインストーラーは、すでに起動しています。"
|
||||
StrCpy $SectionGroup_Shortcuts "ショートカット"
|
||||
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} の旧バージョンがインストールされています。$\n旧バージョンをアンインストールし、最新バージョンをインストールするのをお勧めします。$\nオペレーションを選択し、次へをクリックする。"
|
||||
StrCpy $PageReinstall_NEW_Field_2 "インストール前にアンインストールする"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "アンインストールしない"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "インストール済"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} のインストール方法を選択する"
|
||||
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} の最新バージョンがすでにインストールされています。$\n旧バージョンのインストールはお勧めしません。旧バージョンのインストールが本当に必要な場合は、まず最新バージョンをアンインストールしてから、旧バージョンをインストールしてください。$\nオペレーションを選択し、次へをクリックする。"
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} は、${VERSION} がすでにインストールされています。$\n$\n実行したい操作を選択して、次へをクリックしてください。"
|
||||
StrCpy $PageReinstall_SAME_Field_2 "追加/再インストールコンポーネント"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} をアンインストール"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} をアンインストール"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "実行するには、メンテナンスオプションを選択してください。"
|
||||
StrCpy $SEC_APPLICATION_DETAILS "${APPLICATION_NAME} の重要なパッケージをインストール中"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Windows エクスプローラーへの統合"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Windows エクスプローラーへの統合をインストールしています。"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "スタートメニューショートカット"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "スタートメニューに${APPLICATION_NAME} のショートカットの追加"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "デスクトップショートカット"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "デスクトップショートカット作成"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "クイック起動ショートカット"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "クイック起動ショートカットを作成"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} の重要なパッケージ"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} のショートカット"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME} のデスクトップショートカット"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME} のクイック起動ショートカット"
|
||||
StrCpy $UNINSTALLER_FILE_Detail "アンインストーラーを書き込み"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "インストーラーのレジストリキーの書き込み"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "終了"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "${APPLICATION_NAME} は'$INSTDIR'.$$ ディレクトリにインストールされていません。エラーを無視し、進みますか (非推奨)?"
|
||||
StrCpy $UNINSTALL_ABORT "アンインストールは、ユーザーによって中止されました。"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "クイック起動ショートカット(N/A)"
|
||||
StrCpy $INIT_NO_DESKTOP "デスクトップにショートカットを作成(すでにある場合は上書き)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "エスカレーション不可です、エラー:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "このインストーラーは、管理者権限が必要です。インストールを再試行してください。"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "インストーラーは、すでに起動しています。"
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "このアンインストーラーは、管理者権限が必要です。アンインストールを再試行してください。"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "ログオンサービスが動いていません。中止します。"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "アンインストーラーは、すでに起動しています。"
|
||||
StrCpy $SectionGroup_Shortcuts "ショートカット"
|
||||
|
||||
@@ -1,26 +1,25 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Vis versjonsmerknader"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Fant ${APPLICATION_EXECUTABLE}-prosess(er) som må stoppes.$\nVil du at installasjonsprogrammet skal stoppe dem for deg?"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Fant ${APPLICATION_EXECUTABLE}-prosess(er) som må stoppes.$\nVil du at installasjonsprogrammet skal stoppe dem for deg?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Terminerer ${APPLICATION_EXECUTABLE}-prosesser."
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Fant ikke prosess som skulle termineres!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "En eldre versjon av ${APPLICATION_NAME} er installert på systemet ditt. Det anbefales at du avinstallerer den versjonen før installering av ny versjon. Velg hva du vil gjøre og klikk Neste for å fortsette."
|
||||
StrCpy $PageReinstall_NEW_Field_2 "Avinstaller før installering"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "En eldre versjon av ${APPLICATION_NAME} er installert på systemet ditt. Det anbefales at du avinstallerer den versjonen før installering av ny versjon. Velg hva du vil gjøre og klikk Neste for å fortsette."
|
||||
StrCpy $PageReinstall_NEW_Field_2 "Avinstaller før installering"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Ikke avinstaller"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Allerede installert"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Velg hvordan du vil installere ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "En nyere versjon av ${APPLICATION_NAME} er allerede installert! Det anbefales ikke at du installerer en eldre versjon. Hvis du virkelig ønsker å installere denne eldre versjonen, er det bedre å avinstallere gjeldende versjon først. Velg hva du vil gjøre og klikk Neste for å fortsette."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} er installert allerede.$\n$\nVelg hva du ønsker å gjøre og klikk Neste for å fortsette."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Legg til/installer komponenter på nytt"
|
||||
StrCpy $PageReinstall_OLD_Field_1 "En nyere versjon av ${APPLICATION_NAME} er allerede installert! Det anbefales ikke at du installerer en eldre versjon. Hvis du virkelig ønsker å installere denne eldre versjonen, er det bedre å avinstallere gjeldende versjon først. Velg hva du vil gjøre og klikk Neste for å fortsette."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} er installert allerede.$\n$\nVelg hva du ønsker å gjøre og klikk Neste for å fortsette."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Legg til/installer komponenter på nytt"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Avinstaller ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Avinstaller ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Velg hva slags vedlikehold som skal utføres."
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Velg hva slags vedlikehold som skal utføres."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Installerer ${APPLICATION_NAME} grunnleggende."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integrering med Windows Utforsker"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installerer integrering med Windows Utforsker"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Snarvei i Start-menyen"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Legger til snarvei for ${APPLICATION_NAME} i Start-menyen."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Snarvei på skrivebordet"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Oppretter snarveier på skrivebordet"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Snarvei på skrivebordet"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Oppretter snarveier på skrivebordet"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Snarvei i Hurtigstart"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Oppretter snarvei i Hurtigstart"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} grunnleggende."
|
||||
@@ -28,16 +27,16 @@ StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME}-snarvei."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Skrivebordssnarvei for ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Hurtigstart-snarvei for ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Skriver Avinstallasjonsprogram."
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Skriver registernøkler for installasjonsprogrammet"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Skriver registernøkler for installasjonsprogrammet"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Ferdig"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Det ser ikke ut som ${APPLICATION_NAME} er installert i mappe '$INSTDIR'.$\n$\nFortsett likevel (ikke anbefalt)?"
|
||||
StrCpy $UNINSTALL_ABORT "Avinstallering avbrutt av bruker"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Hurtigstart-snarvei (I/T)"
|
||||
StrCpy $INIT_NO_DESKTOP "Snarvei på skrivebordet (skriver over eksisterende)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Klarte ikke å heve tilgangsnivå. Feil: "
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Dette installasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Installasjonsprogrammet kjører allerede."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Avinstallasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Påloggingstjenesten kjører ikke, avbryter!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallasjonsprogrammet kjører allerede."
|
||||
StrCpy $INIT_NO_DESKTOP "Snarvei på skrivebordet (skriver over eksisterende)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Klarte ikke å heve tilgangsnivå. Feil: "
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Dette installasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Installasjonsprogrammet kjører allerede."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Avinstallasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Påloggingstjenesten kjører ikke, avbryter!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallasjonsprogrammet kjører allerede."
|
||||
StrCpy $SectionGroup_Shortcuts "Snarveier"
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
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 $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Pokaż informacje o wydaniu"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Znaleziono proces(y) ${APPLICATION_EXECUTABLE}, które muszą być zatrzymane $\nCzy chcesz, aby instalator zatrzymał je za 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_Field_3 "Nie usuwaj "
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ju¿ zainstalowane"
|
||||
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 $PageReinstall_SAME_Field_2 "Doda/Przeinstaluj komponenty"
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Nie znaleziono procesu do zatrzymania!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "W Twoim systemie jest zainstalowana starsza wersja ${APPLICATION_NAME}. Zaleca się odinstalowanie aktualnej wersji przed instalacją. Wybierz operację, którą chcesz wykonać i kliknij 'Dalej', aby kontynuować."
|
||||
StrCpy $PageReinstall_NEW_Field_2 "Odinstaluj przed instalacją"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Nie odinstalowuj"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Już zainstalowane"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wybierz, jak chcesz zainstalować ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Nowsza wersja ${APPLICATION_NAME} jest już zainstalowana! Nie zaleca się instalowania starszej wersji. Jeśli koniecznie chcesz zainstalować starszą wersję, najpierw odinstaluj bieżącą wersję. Wybierz operację, którą chcesz wykonać i kliknij 'Dalej', aby kontynuować."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} jest już zainstalowany.$\nWybierz operację, którą chcesz wykonać i kliknij 'Dalej', aby kontynuować."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Dodaj/zainstaluj ponownie komponenty"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Odinstaluj ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstaluj ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Wybierz sposób utrzymywania."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Instaluje niezbêdne pliki ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "integracja z Eksploratorem Windows"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalowanie Integracji z Eksploratorem Windows"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Skrót w Menu Start"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Dodajê skrót ${APPLICATION_NAME} w Menu Start."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Skrót na Pulpicie"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Utworzy skrót na Pulpicie"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Skrót na Pasku Zadañ"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Tworzê skrót na Pasku Zadañ"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Niezbêdne pliki ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Skrót ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Skrót ${APPLICATION_NAME} na pulpicie."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Skrót ${APPLICATION_NAME} na Pasku Zadañ."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Tworzê dezinstalator"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Tworzê wpisy w rejestrze"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Zakoñczony"
|
||||
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 $UAC_ERROR_ELEVATE "Niemo¿noœæ podniesienia, b³¹d:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Ten instalator potrzebuje uprawnieñ administratora, spróbuj ponownie"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Instalator ju¿ jest uruchomiony."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ten dezinstalator potrzebuje uprawnieñ administratora, spróbuj ponownie"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Proces logowania nie jest uruchomiony, przerywam !"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Dezinstalator ju¿ jest uruchomiony."
|
||||
StrCpy $SectionGroup_Shortcuts "Skróty"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Wybierz opcję konserwacji do wykonania."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Instalowanie niezbędnych plików ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integracja z Eksploratorem Windows"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalowanie integracji dla Eksploratora Windows"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Skrót w Menu Start"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Dodaję skrót do ${APPLICATION_NAME} w Menu Start."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Skrót na Pulpicie"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Tworzenie skrótów na Pulpicie"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Skrót na Pasku Zadań"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Tworzenie skrótu na Pasku Zadań"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Niezbędne pliki ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Skrót do ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Skrót na Pulpicie do ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Skrót na Pasku Zadań do ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Tworzenie deinstalatora"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Tworzenie wpisów w rejestrze"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Skończone"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Nie wygląda na to, że ${APPLICATION_NAME} jest zainstalowany w katalogu '$INSTDIR'.$$ Kontynuować mimo tego (niezalecane)?"
|
||||
StrCpy $UNINSTALL_ABORT "Odinstalowywanie przerwane przez użytkownika"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Skrót na Pasku Zadań (NIE DOTYCZY)"
|
||||
StrCpy $INIT_NO_DESKTOP "Skrót na Pulpicie (nadpisuje istniejące)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Nie można podwyższyć, błąd:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Ten instalator wymaga dostępu administratora, spróbuj ponownie."
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Instalator jest już uruchomiony."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ten deinstalator wymaga dostępu administratora, spróbuj ponownie."
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Proces logowania nie jest uruchomiony, przerywam!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Deinstalator jest już uruchomiony."
|
||||
StrCpy $SectionGroup_Shortcuts "Skróty"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar notas de lançamento"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Encontrados ${APPLICATION_EXECUTABLE} processo(s) em execução que precisa(m) de ser interrompido(s).$\nDeseja que o instalador o(s) termine por si?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "A terminar os processos de ${APPLICATION_EXECUTABLE}."
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar notas de lançamento"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Encontrados ${APPLICATION_EXECUTABLE} processo(s) que precisam ser interrompidos.$\nVocê quer que o instalador pare esses processos para você?"
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar notas de lançamento"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Encontrados ${APPLICATION_EXECUTABLE} processo(s) que precisam ser interrompidos.$\nVocê quer que o instalador pare esses processos para você?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Desativando ${APPLICATION_EXECUTABLE} processos."
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Processo para eliminar não encontrado!"
|
||||
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 $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Processo para eliminar não encontrado!"
|
||||
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_Field_3 "Não desinstale"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já Instalado"
|
||||
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.$\n$\nSelecione a operação que você quer realizar e clique Próximo para continuar."
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Não desinstale"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já Instalado"
|
||||
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.$\n$\nSelecione a operação que você quer realizar e clique Próximo para continuar."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Adicionar/reinstalar componentes"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Escolha a opção de realizar manutenção."
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Escolha a opção de realizar manutenção."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Instalando ${APPLICATION_NAME} fundamentos."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integração para Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalação de Integração para Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integração para Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalação de Integração para Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Menu Iniciar Programa Atalho"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Adicionando atalho para ${APPLICATION_NAME} ao Menu Iniciar."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Atalho Desktop"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Criando Atalhos de Desktop"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Atalho Rápido"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Criando Atalho Rápido"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Atalho Rápido"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Criando Atalho Rápido"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} esseciais."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} atalho."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Atalho Desktop para ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Atalho Rápido para ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Atalho Rápido para ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Gravando Desinstalador"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Gravando Chaves de Registro do Inslalador"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Finalizado"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Não parece que ${APPLICATION_NAME} está instalado no diretório '$INSTDIR'.$\n$\nContinuar assim mesmo (não recomendado)?"
|
||||
StrCpy $UNINSTALL_ABORT "Desinstalação abortada pelo usuário"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Atalho de Inicialização Rápida (N/A)"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Não parece que ${APPLICATION_NAME} está instalado no diretório '$INSTDIR'.$\n$\nContinuar assim mesmo (não recomendado)?"
|
||||
StrCpy $UNINSTALL_ABORT "Desinstalação abortada pelo usuário"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Atalho de Inicialização Rápida (N/A)"
|
||||
StrCpy $INIT_NO_DESKTOP "Atalho Desktop (substitui os existente)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Incapaz de elevar, erro:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este programa de instalação requer acesso de administrador, tente novamente"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "O instalador já está em execução."
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este programa de instalação requer acesso de administrador, tente novamente"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "O instalador já está em execução."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador requer acesso de administrador, tente novamente"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "O serviço de logon não está sendo executado, abortando!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador já está em execução."
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "O serviço de logon não está sendo executado, abortando!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador já está em execução."
|
||||
StrCpy $SectionGroup_Shortcuts "Atalhos"
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Показать примечания к выпуску"
|
||||
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 "Процессы для завершения не найдены!"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "查看版本日志"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "有 ${APPLICATION_EXECUTABLE} 项进程需要关闭。$\n您想让安装程序关闭这些进程吗?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "停止${APPLICATION_EXECUTABLE}进程。"
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
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_KILLING_PROCESSES_TEXT "Ukonèujem ${APPLICATION_EXECUTABLE} procesy."
|
||||
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 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 $PageReinstall_NEW_Field_3 "Neodinštalova<EFBFBD>"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Už je nainštalovaný"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vyberte si, ako chcete nainštalova<76> ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Novšia verzia ${APPLICATION_NAME} je už nainštalovaná! Neodporúèam vám nainštalova<76> staršiu verziu. Ak naozaj chcete nainštalova<76> túto staršiu verziu, je lepšie najprv odinštalova<76> aktuálnu verziu. Vyberte operáciu, ktorú chcete vykona<EFBFBD>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je už nainštalovaná.$\n$\nVyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Prida<EFBFBD>/Preinštalova<76> komponenty"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Odinštalova<EFBFBD> ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinštalova<EFBFBD> ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Vyberte možnos<6F> vykona<6E> údržbu."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Inštalujú sa náležitosti ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integrácia do Windows Explorera"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Inštalaácia integrácie do Windows Explorera"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Zástupca programu v menu Štart"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Prida<EFBFBD> zástupcu pre ${APPLICATION_NAME} do menu Štart."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Zástupca na ploche"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Vytvorenie zástupcu na ploche"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Zástupca na paneli úloh"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Vytvorenie zástupcu na paneli úloh"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Náležitosti ${APPLICATION_NAME}"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} zástupca."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Zástupca na ploche pre ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Zástupca na paneli úloh pre ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisujem odinštalátor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisujem inštalaèné k¾úèe do registra"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Dokonèené"
|
||||
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 $UNINSTALL_ABORT "Odinštalácia prerušená používate¾om"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Zástupca na paneli úloh (N/A)"
|
||||
StrCpy $INIT_NO_DESKTOP "Zástupca na ploche (prepíše existujúci)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Nemožno povýši<C5A1>, chyba:"
|
||||
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 $UAC_ERROR_LOGON_SERVICE "Prihlasovacia služba nebeží! Prerušuje sa."
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Odinštalátor je už spustený."
|
||||
StrCpy $SectionGroup_Shortcuts "Zástupcovia"
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Zobraziť zoznam zmien"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Našli sa ${APPLICATION_EXECUTABLE} proces (y), ktoré je potrebné zastaviť.$\nChcete, aby ich inštalátor zastavil?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Ukončujem ${APPLICATION_EXECUTABLE} procesy."
|
||||
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 počítači. Odporúčam vám odinštalovať aktuálnu verziu pred inštaláciou. Vyberte operáciu, ktorú chcete vykonať, a kliknite na tlačidlo Ďalej pre pokračovanie."
|
||||
StrCpy $PageReinstall_NEW_Field_2 "Odinštalovať pred inštaláciou"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Neodinštalovať"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Už je nainštalovaný"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vyberte si, ako chcete nainštalovať ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Novšia verzia ${APPLICATION_NAME} je už nainštalovaná! Neodporúčam vám nainštalovať staršiu verziu. Ak naozaj chcete nainštalovať túto staršiu verziu, je lepšie najprv odinštalovať aktuálnu verziu. Vyberte operáciu, ktorú chcete vykonať, a kliknite na tlačidlo Ďalej pre pokračovanie."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je už nainštalovaná.$\n$\nVyberte operáciu, ktorú chcete vykonať, a kliknite na tlačidlo Ďalej pre pokračovanie."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Pridať/Preinštalovať komponenty"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Odinštalovať ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinštalovať ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Vyberte možnosť vykonať údržbu."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Inštalujú sa náležitosti ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integrácia do Windows Explorera"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Inštalaácia integrácie do Windows Explorera"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Zástupca programu v menu Štart"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Pridať zástupcu pre ${APPLICATION_NAME} do menu Štart."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Zástupca na ploche"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Vytvorenie zástupcu na ploche"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Zástupca na paneli úloh"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Vytvorenie zástupcu na paneli úloh"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Náležitosti ${APPLICATION_NAME}"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} zástupca."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Zástupca na ploche pre ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Zástupca na paneli úloh pre ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisujem odinštalátor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisujem inštalačné kľúče do registra"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Dokončené"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Nezdá sa, že ${APPLICATION_NAME} je nainštalovaný v priečinku '$INSTDIR'.$\n$\nNapriek tomu pokračovať (neodporúča sa)?"
|
||||
StrCpy $UNINSTALL_ABORT "Odinštalácia prerušená používateľom"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Zástupca na paneli úloh (N/A)"
|
||||
StrCpy $INIT_NO_DESKTOP "Zástupca na ploche (prepíše existujúci)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Nemožno povýšiť, chyba:"
|
||||
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 $UAC_ERROR_LOGON_SERVICE "Prihlasovacia služba nebeží! Prerušuje sa."
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Odinštalátor je už spustený."
|
||||
StrCpy $SectionGroup_Shortcuts "Zástupcovia"
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
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 $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 $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 $PageReinstall_NEW_Field_3 "Ne odstrani namestitve"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Program je že nameščen"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Izberite način namestitve programa ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Novejša različica programa ${APPLICATION_NAME} je že nameščena! Ni priporočljivo namestiti starejše. V kolikor želite vseeno nadaljevati z namestitvijo, prej odstranite obstoječo različico. Izberite opravilo in pritisnite gumb za nadaljevanje."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "Program ${APPLICATION_NAME} ${VERSION} je že nameščen.$\n$\nIzberite opravilo, ki ga želite izvesti in kliknite za nadaljevanje."
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Program je že nameščen"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Izberite način namestitve programa ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Novejša različica programa ${APPLICATION_NAME} je že nameščena! Ni priporočljivo namestiti starejše. V kolikor želite vseeno nadaljevati z namestitvijo, prej odstranite obstoječo različico. Izberite opravilo in pritisnite gumb za nadaljevanje."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "Program ${APPLICATION_NAME} ${VERSION} je že nameščen.$\n$\nIzberite opravilo, ki ga želite izvesti in kliknite za nadaljevanje."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Dodaj/Ponovno namesti programe"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Odstrani ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odstrani ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Izberite možnost vzdrževanja za izvedbo."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Poteka nameščanje ključnih paketov programa ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Izberite možnost vzdrževanja za izvedbo."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Poteka nameščanje ključnih paketov programa ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Podpora programa Windows raziskovalca"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Nameščanje podpore za program Windows Raziskovalec"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Bližnjica programa v programskem meniju"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Poteka dodajanje bližnjice programa ${APPLICATION_NAME} v programski meni."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Bližnica namizja"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Poteka ustvarjanje bližnjice na namizju"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Bližnjica na hitri dostop"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Poteka ustvarjanje bližnjice za hitri dostop"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Knjižnice programa ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Bližnjica programa ${APPLICATION_NAME}"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Bližnjica namizja za program ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Bližnjica za hiter dostop za program ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Nameščanje podpore za program Windows Raziskovalec"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Bližnjica programa v programskem meniju"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Poteka dodajanje bližnjice programa ${APPLICATION_NAME} v programski meni."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Bližnica namizja"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Poteka ustvarjanje bližnjice na namizju"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Bližnjica na hitri dostop"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Poteka ustvarjanje bližnjice za hitri dostop"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Knjižnice programa ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Bližnjica programa ${APPLICATION_NAME}"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Bližnjica namizja za program ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Bližnjica za hiter dostop za program ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisovanje programa za odstranjevanje namestitve"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Poteka zapisovanje namestilnika v register"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Končano"
|
||||
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 $UNINSTALLER_FINISHED_Detail "Končano"
|
||||
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_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 $UAC_ERROR_LOGON_SERVICE "Storitev za prijavo ni zagnana. Opravilo je ustavljeno!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Program za odstranjevanje namestitve je že zagnan."
|
||||
StrCpy $SectionGroup_Shortcuts "Bližnjice"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Program za odstranjevanje namestitve je že zagnan."
|
||||
StrCpy $SectionGroup_Shortcuts "Bližnjice"
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
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 detenido(s).$\n¿Quiere que el instalador lo haga por usted?"
|
||||
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 detenido(s).$\n¿Quiere que el instalador lo haga por usted?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Deteniendo el/los proceso(s) ${APPLICATION_EXECUTABLE}."
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "¡Proceso a finalizar no encontrado!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "Una versión anterior de ${APPLICATION_NAME} se encuentra instalada en el sistema. Se recomienda desinstalar la versión actual antes de instalar la nueva. Seleccione la operacion deseada y haga click en Siguiente para continuar."
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "¡Proceso a finalizar no encontrado!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "Una versión anterior de ${APPLICATION_NAME} se encuentra instalada en el sistema. Se recomienda desinstalar 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 cómo 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 Siguiente para continuar."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ya está instalado.$\n$\nSeleccione la operación que desea realizar y haga click en Siguiente para continuar."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Añadir/Reinstalar componentes"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ya está instalado"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Elija cómo 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 Siguiente para continuar."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ya está instalado.$\n$\nSeleccione la operación que desea realizar y haga click en Siguiente para continuar."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Añadir/Reinstalar componentes"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Elija la opcion de mantenimiento a realizar."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Instalando ${APPLICATION_NAME} esenciales."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integración para Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalando la integración para Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Acceso directo al programa en Menú de Inicio"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Añadiendo accesos directos para ${APPLICATION_NAME} en el Menú de Inicio."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integración para Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalando la integración para Windows Explorer"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Acceso directo al programa en Menú de Inicio"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Añadiendo accesos directos para ${APPLICATION_NAME} en el Menú de Inicio."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Acceso directo de Escritorio"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Creando accesos directos de escritorio"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Atajo de acceso rápido"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Creando un Acceso Directo al Lanzador Rápido"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Atajo de acceso rápido"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Creando un Acceso Directo al Lanzador Rápido"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} esenciales."
|
||||
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 $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Lanzador Rápido de Accesos Director para ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Escribiendo desinstalador"
|
||||
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 "Atajo de inicio rápido (N/A)"
|
||||
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 "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, 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, inténtelo de nuevo"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Servicio Inicio de sesión no se está ejecutando, abortando!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "El desinstalador ya se encuentra en ejecución."
|
||||
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, inténtelo de nuevo"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Servicio Inicio de sesión no se está ejecutando, abortando!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "El desinstalador ya se encuentra en ejecución."
|
||||
StrCpy $SectionGroup_Shortcuts "Accesos directos"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar notas de la versión"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Se encontrarion ${APPLICATION_EXECUTABLE} proceso(s) que debe/n ser detenidos.$\"$\n$\"¿Quiere que el instalador lo haga por usted?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Parando el proceso ${APPLICATION_EXECUTABLE}."
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Visa versionsinformationen"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Hittade ${APPLICATION_EXECUTABLE} process(er) som behöver stoppas.$\nVill du att installationsprogrammet ska stoppa dessa åt dig?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Dödar ${APPLICATION_EXECUTABLE} processer."
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "แสดงบันทึกที่มี"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "พบว่ากระบวนการ ${APPLICATION_EXECUTABLE} จะต้องหยุดทำงาน$\nคุณต้องการติดตั้งเพื่อหยุดการทำงานเหล่านี้ของคุณ?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "ฆ่ากระบวนการทำงาน ${APPLICATION_EXECUTABLE}"
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Sürüm notlarýný göster"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Durdurulmasý gereken ${APPLICATION_EXECUTABLE} süreçleri bulundu.$\nYükleyicinin bunlarý sizin için durdurmasýný ister misiniz?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "${APPLICATION_EXECUTABLE} süreçleri sonlandýrýlýyor."
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Sonlandýrýlacak süreç bulunamadý!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "${APPLICATION_NAME} önceki sürümü sisteminizde yüklü. Kurulumdan önce bunu kaldýrmanýz önerilir. Yapmak istediðiniz iþlemi seçip devam etmek için Ýleri týklayýn."
|
||||
StrCpy $PageReinstall_NEW_Field_2 "Yüklemeden önce kaldýr"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Kaldýrma"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Zaten Yüklü"
|
||||
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ü.$\n$\nYapmak istediðiniz iþlemi seçin ve devam etmek için Ýleri týklayýn."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Bileþenleri ekle/yeniden yükle"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} uygulamasýný kaldýr"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} uygulamasýný kaldýr"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Yapmak istediðiniz bakým iþlemini seçin."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "${APPLICATION_NAME} gereklilikleri yükleniyor."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Windows Gezgini için tümleþtirme"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Windows Gezgini için Tümleþtirme Yükleme"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Baþlat Menüsü Program Kýsayolu"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "${APPLICATION_NAME} için Baþlat Menüsü'ne kýsayol ekleniyor."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Masaüstü Kýsayolu"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Masaüstü Kýsayollarý Oluþturuluyor"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Hýzlý Baþlat Kýsayolu"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Hýzlý Baþlat Kýsayolu Oluþturuluyor"
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Sürüm notlarını göster"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Durdurulması gereken ${APPLICATION_EXECUTABLE} süreçleri bulundu.$\nYükleyicinin bunları sizin için durdurmasını ister misiniz?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "${APPLICATION_EXECUTABLE} süreçleri sonlandırılıyor."
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Sonlandırılacak süreç bulunamadı!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "${APPLICATION_NAME} önceki sürümü sisteminizde yüklü. Kurulumdan önce bunu kaldırmanız önerilir. Yapmak istediğiniz işlemi seçip devam etmek için İleri tıklayın."
|
||||
StrCpy $PageReinstall_NEW_Field_2 "Yüklemeden önce kaldır"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Kaldırma"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Zaten Yüklü"
|
||||
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ü.$\n$\nYapmak istediğiniz işlemi seçin ve devam etmek için İleri tıklayın."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Bileşenleri ekle/yeniden yükle"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} uygulamasını kaldır"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} uygulamasını kaldır"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Yapmak istediğiniz bakım işlemini seçin."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "${APPLICATION_NAME} gereklilikleri yükleniyor."
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Windows Gezgini için tümleştirme"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Windows Gezgini için Tümleştirme Yükleme"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Başlat Menüsü Program Kısayolu"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "${APPLICATION_NAME} için Başlat Menüsü'ne kısayol ekleniyor."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Masaüstü Kısayolu"
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Masaüstü Kısayolları Oluşturuluyor"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Hızlı Başlat Kısayolu"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Hızlı Başlat Kısayolu Oluşturuluyor"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} gereklilikleri."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} kýsayolu."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME} için masaüstü kýsayolu."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME} için Hýzlý Baþlat kýsayolu."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Kaldýrýcý Yazýlýyor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Yükleyici Kayýt Anahtarlarý Yazýlýyor"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Tamamlandý"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "${APPLICATION_NAME} uygulamasý '$INSTDIR' dizinine yüklenmiþ gibi görünmüyor.$\n$\nYine de devam edilsin mi (önerilmez)?"
|
||||
StrCpy $UNINSTALL_ABORT "Kaldýrma kullanýcý tarafýndan iptal edildi"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Hýzlý Baþlat Kýsayolu (Kullanýlamýyor)"
|
||||
StrCpy $INIT_NO_DESKTOP "Masaüstü Kýsayolu (mevcut olanýn üzerine yazýlýr)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Yükseltme baþarýsýz, hata:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Bu yükleyici yönetici eriþimi gerektiriyor, yeniden deneyin"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Yükleyici zaten çalýþýyor."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Bu kaldýrýcý yönetici eriþimi gerektiriyor, yeniden deneyin"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Oturum açýlacak sunucu çalýþmadýðýndan iptal ediliyor!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Kaldýrýcý zaten çalýþýyor."
|
||||
StrCpy $SectionGroup_Shortcuts "Kýsayollar"
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} kısayolu."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME} için masaüstü kısayolu."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME} için Hızlı Başlat kısayolu."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Kaldırıcı Yazılıyor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Yükleyici Kayıt Anahtarları Yazılıyor"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Tamamlandı"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "${APPLICATION_NAME} uygulaması '$INSTDIR' dizinine yüklenmiş gibi görünmüyor.$\n$\nYine de devam edilsin mi (önerilmez)?"
|
||||
StrCpy $UNINSTALL_ABORT "Kaldırma kullanıcı tarafından iptal edildi"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Hızlı Başlat Kısayolu (Kullanılamıyor)"
|
||||
StrCpy $INIT_NO_DESKTOP "Masaüstü Kısayolu (mevcut olanın üzerine yazılır)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Yükseltme başarısız, hata:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Bu yükleyici yönetici erişimi gerektiriyor, yeniden deneyin"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Yükleyici zaten çalışıyor."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Bu kaldırıcı yönetici erişimi gerektiriyor, yeniden deneyin"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Oturum açılacak sunucu çalışmadığından iptal ediliyor!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Kaldırıcı zaten çalışıyor."
|
||||
StrCpy $SectionGroup_Shortcuts "Kısayollar"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Показати примітки до випуску"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Знайдено процес(и) ${APPLICATION_EXECUTABLE}, які необхідно зупинити.$\nХочете щоб програма установки зробила це самостійно?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Завершення процесів ${APPLICATION_EXECUTABLE}."
|
||||
|
||||
@@ -1,190 +0,0 @@
|
||||
##############################################################################
|
||||
#
|
||||
# PROJECT: ownCloud v1.0
|
||||
# LICENSE: See LICENSE in the top level directory
|
||||
#
|
||||
##############################################################################
|
||||
import collections
|
||||
import os
|
||||
import polib
|
||||
from optparse import OptionParser
|
||||
|
||||
try:
|
||||
unicode
|
||||
except NameError:
|
||||
unicode = str
|
||||
|
||||
parser = OptionParser()
|
||||
parser.add_option("-o", "--output", dest="output",
|
||||
help="Directory for localized output", default="../Shared/installer/nightly_localized.nsi")
|
||||
parser.add_option("-p", "--podir", dest="podir",
|
||||
help="Directory containing PO files", default="../Shared/installer/locale/")
|
||||
parser.add_option("-l", "--lang", dest="lang",
|
||||
help="Default language of the NSI", default="English" )
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
|
||||
# Define a dict to convert locale names to language names
|
||||
localeToName = {
|
||||
"af" : "Afrikaans",
|
||||
"sq" : "Albanian",
|
||||
"ar" : "Arabic",
|
||||
"hy" : "Armenian",
|
||||
"eu" : "Basque",
|
||||
"be" : "Belarusian",
|
||||
"bs" : "Bosnian",
|
||||
"br" : "Breton",
|
||||
"bg" : "Bulgarian",
|
||||
"ca" : "Catalan",
|
||||
"bem" : "Cibemba",
|
||||
"hr" : "Croatian",
|
||||
"cs" : "Czech",
|
||||
"da" : "Danish",
|
||||
"nl" : "Dutch",
|
||||
"efi" : "Efik",
|
||||
"en" : "English",
|
||||
"eo" : "Esperanto",
|
||||
"et" : "Estonian",
|
||||
"fa" : "Farsi",
|
||||
"fi" : "Finnish",
|
||||
"fr" : "French",
|
||||
"gl" : "Galician",
|
||||
"ka" : "Georgian",
|
||||
"de" : "German",
|
||||
"el" : "Greek",
|
||||
"he" : "Hebrew",
|
||||
"hi" : "Hindi",
|
||||
"hu" : "Hungarian",
|
||||
"is" : "Icelandic",
|
||||
"ig" : "Igbo",
|
||||
"id" : "Indonesian",
|
||||
"ga" : "Irish",
|
||||
"it" : "Italian",
|
||||
"ja" : "Japanese",
|
||||
"km" : "Khmer",
|
||||
"ko" : "Korean",
|
||||
"ku" : "Kurdish",
|
||||
"lv" : "Latvian",
|
||||
"lt" : "Lithuanian",
|
||||
"lb" : "Luxembourgish",
|
||||
"mk" : "Macedonian",
|
||||
"mg" : "Malagasy",
|
||||
"ms" : "Malay",
|
||||
"mn" : "Mongolian",
|
||||
"nb_NO" : "Norwegian",
|
||||
"nn" : "NorwegianNynorsk",
|
||||
"ps" : "Pashto",
|
||||
"pl" : "Polish",
|
||||
"pt" : "Portuguese",
|
||||
"pt_BR" : "PortugueseBR",
|
||||
"ro" : "Romanian",
|
||||
"ru" : "Russian",
|
||||
"sr" : "Serbian",
|
||||
"sr_sp" : "SerbianLatin",
|
||||
"st" : "Sesotho",
|
||||
"sn" : "Shona",
|
||||
"zh_CN" : "SimpChinese",
|
||||
"sk" : "Slovak",
|
||||
"sl" : "Slovenian",
|
||||
"es" : "Spanish",
|
||||
"es_AR" : "SpanishInternational",
|
||||
"sw" : "Swahili",
|
||||
"sv" : "Swedish",
|
||||
"ta" : "Tamil",
|
||||
"th" : "Thai",
|
||||
"zh_HK" : "TradChinese",
|
||||
"tr" : "Turkish",
|
||||
"tw" : "Twi",
|
||||
"uk" : "Ukrainian",
|
||||
"ug" : "Uyghur",
|
||||
"uz" : "Uzbek",
|
||||
"ca@valencia" : "Valencian",
|
||||
"vi" : "Vietnamese",
|
||||
"cy" : "Welsh",
|
||||
"yo" : "Yoruba",
|
||||
"zu" : "Zulu",
|
||||
}
|
||||
|
||||
def escapeNSIS(st):
|
||||
return st.replace('\\', r'$\\')\
|
||||
.replace('\t', r'$\t')\
|
||||
.replace('\r', r'$\r')\
|
||||
.replace('\n', r'$\n')\
|
||||
.replace('\"', r'$\"')\
|
||||
.replace('$$\\', '$\\')\
|
||||
.replace('$\\n', r'$\n')\
|
||||
.replace('$\\\\n', r'$\n')
|
||||
|
||||
|
||||
translationCache = {}
|
||||
|
||||
# The purpose of this loop is to go to the podir scanning for PO files for each locale name
|
||||
# Once we've found a PO file, we use PO lib to read every translated entry
|
||||
# Using this, for each each language, we store a dict of entries - { nsilabel (comment) : translation (msgstr) }
|
||||
# For untranslated entries, we use msgid instead of msgstr (i.e. default English string)
|
||||
for root,dirs,files in os.walk(options.podir):
|
||||
for file in files:
|
||||
filename,ext = os.path.splitext(file)
|
||||
if ext == ".po":
|
||||
# Valid locale filename (fr.po, de.po etc)?
|
||||
if filename in localeToName:
|
||||
language = localeToName[filename]
|
||||
translationCache[language] = collections.OrderedDict()
|
||||
|
||||
po = polib.pofile(os.path.join(root,file))
|
||||
for entry in po.translated_entries():
|
||||
# Loop through all our labels and add translation (each translation may have multiple labels)
|
||||
for label in entry.comment.split():
|
||||
translationCache[language][label] = escapeNSIS(entry.msgstr)
|
||||
# For untranslated strings, let's add the English entry
|
||||
for entry in po.untranslated_entries():
|
||||
for label in entry.comment.split():
|
||||
print("Warning: Label '%s' for language '%s' remains untranslated"%(label,language))
|
||||
translationCache[language][label] = escapeNSIS(entry.msgid)
|
||||
|
||||
def tostr(obj):
|
||||
if type(obj) == unicode:
|
||||
return obj.encode("utf-8")
|
||||
else:
|
||||
return obj
|
||||
|
||||
NSILanguages = []
|
||||
NSIDeclarations = []
|
||||
|
||||
# file header
|
||||
NSILanguages.append( tostr('; Auto-generated - do not modify\n') )
|
||||
NSIDeclarations.append( tostr('; Auto-generated - do not modify\n') )
|
||||
|
||||
# loopthrough the languages an generate one nsh files for each language
|
||||
lineNo = 1
|
||||
for language,translations in translationCache.iteritems():
|
||||
NSINewLines = []
|
||||
NSINewLines.append( tostr('# Auto-generated - do not modify\n') )
|
||||
count = 0
|
||||
# if the language isn't the default, we add our MUI_LANGUAGE macro
|
||||
if language.upper() != options.lang.upper():
|
||||
NSILanguages.append( tostr('!insertmacro MUI_LANGUAGE "%s"\n'%language) )
|
||||
|
||||
# For every translation we grabbed from the .po, let's add our StrCpy command
|
||||
for label,value in translations.iteritems():
|
||||
NSINewLines.append( tostr('StrCpy $%s "%s"\n' % (label,value)) )
|
||||
if language.upper() == options.lang.upper():
|
||||
NSIDeclarations.append( tostr('Var %s\n' % label) )
|
||||
|
||||
count += 1
|
||||
NSIWorkingFile = open('%s/%s.nsh' % (options.output, language),"w")
|
||||
NSIWorkingFile.writelines(NSINewLines)
|
||||
NSIWorkingFile.close()
|
||||
print ( "%i translations merged for language '%s'"%(count,language) )
|
||||
|
||||
# Finally, let's write languages.nsh and declarations.nsh
|
||||
NSIWorkingFile = open('%s/languages.nsh' % options.output,"w")
|
||||
NSIWorkingFile.writelines(NSILanguages)
|
||||
NSIWorkingFile.close()
|
||||
|
||||
NSIWorkingFile = open('%s/declarations.nsh' % options.output,"w")
|
||||
NSIWorkingFile.writelines(NSIDeclarations)
|
||||
NSIWorkingFile.close()
|
||||
|
||||
print ( "NSI Localization Operation Complete" )
|
||||
@@ -1,51 +0,0 @@
|
||||
#!/bin/bash -x
|
||||
L10NDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )"
|
||||
SCRIPTDIR="$L10NDIR/bin"
|
||||
PODIR="$L10NDIR/pofiles"
|
||||
|
||||
# messages.pot will be used as English translation
|
||||
cp -f $PODIR/messages.pot $PODIR/en.po
|
||||
|
||||
# generate all the languages nsh files
|
||||
python $SCRIPTDIR/build_locale_nsi.py -o $L10NDIR -p $PODIR -l "English"
|
||||
|
||||
# for future references: the windows code pages
|
||||
# 874 — Thai
|
||||
# 932 — Japanese
|
||||
# 936 — Chinese (simplified) (PRC, Singapore)
|
||||
# 949 — Korean
|
||||
# 950 — Chinese (traditional) (Taiwan, Hong Kong)
|
||||
# 1200 — Unicode (BMP of ISO 10646, UTF-16LE)
|
||||
# 1201 — Unicode (BMP of ISO 10646, UTF-16BE)
|
||||
# 1250 — Latin (Central European languages)
|
||||
# 1251 — Cyrillic
|
||||
# 1252 — Latin (Western European languages, replacing Code page 850)
|
||||
# 1253 — Greek
|
||||
# 1254 — Turkish
|
||||
# 1255 — Hebrew
|
||||
# 1256 — Arabic
|
||||
# 1257 — Latin (Baltic languages)
|
||||
# 1258 — Vietnamese
|
||||
|
||||
# convert file to proper content
|
||||
cd $L10NDIR
|
||||
iconv -t CP1252 -o German.nsh German.nsh
|
||||
iconv -t CP1252 -o Basque.nsh Basque.nsh
|
||||
iconv -t CP1252 -o English.nsh English.nsh
|
||||
iconv -t CP1252 -o Galician.nsh Galician.nsh
|
||||
iconv -t CP1253 -o Greek.nsh Greek.nsh
|
||||
iconv -t CP1250 -o Slovenian.nsh Slovenian.nsh
|
||||
iconv -t CP1257 -o Estonian.nsh Estonian.nsh
|
||||
iconv -t CP1252 -o Italian.nsh Italian.nsh
|
||||
iconv -t CP1252 -o PortugueseBR.nsh PortugueseBR.nsh
|
||||
iconv -t CP1252 -o Spanish.nsh Spanish.nsh
|
||||
iconv -t CP1252 -o Dutch.nsh Dutch.nsh
|
||||
iconv -t CP1252 -o Finnish.nsh Finnish.nsh
|
||||
iconv -t CP932 -o Japanese.nsh Japanese.nsh
|
||||
iconv -t CP1250 -o Slovak.nsh Slovak.nsh
|
||||
iconv -t CP1254 -o Turkish.nsh Turkish.nsh
|
||||
iconv -t CP1252 -o Norwegian.nsh Norwegian.nsh
|
||||
iconv -t CP1250 -o Polish.nsh Polish.nsh
|
||||
iconv -t CP852 -o Czech.nsh Czech.nsh
|
||||
#iconv -t CP852 -o Slovak.nsh Slovak.nsh
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
; Auto-generated - do not modify
|
||||
Var MUI_FINISHPAGE_SHOWREADME_TEXT_STRING
|
||||
Var ConfirmEndProcess_MESSAGEBOX_TEXT
|
||||
Var ConfirmEndProcess_KILLING_PROCESSES_TEXT
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
; Auto-generated - do not modify
|
||||
!insertmacro MUI_LANGUAGE "Swedish"
|
||||
!insertmacro MUI_LANGUAGE "Estonian"
|
||||
!insertmacro MUI_LANGUAGE "Turkish"
|
||||
|
||||
@@ -1,194 +0,0 @@
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: ownCloud\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-12-09 06:40\n"
|
||||
"PO-Revision-Date: 2013-12-03 23:13+0000\n"
|
||||
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: en\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. MUI_FINISHPAGE_SHOWREADME_TEXT_STRING
|
||||
msgid "Show release notes"
|
||||
msgstr "Show release notes"
|
||||
|
||||
#. ConfirmEndProcess_MESSAGEBOX_TEXT
|
||||
msgid ""
|
||||
"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\n"
|
||||
"Do you want the installer to stop these for you?"
|
||||
msgstr "Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
|
||||
|
||||
#. ConfirmEndProcess_KILLING_PROCESSES_TEXT
|
||||
msgid "Killing ${APPLICATION_EXECUTABLE} processes."
|
||||
msgstr "Killing ${APPLICATION_EXECUTABLE} processes."
|
||||
|
||||
#. ConfirmEndProcess_KILL_NOT_FOUND_TEXT
|
||||
msgid "Process to kill not found!"
|
||||
msgstr "Process to kill not found!"
|
||||
|
||||
#. PageReinstall_NEW_Field_1
|
||||
msgid ""
|
||||
"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."
|
||||
msgstr "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."
|
||||
|
||||
#. PageReinstall_NEW_Field_2
|
||||
msgid "Uninstall before installing"
|
||||
msgstr "Uninstall before installing"
|
||||
|
||||
#. PageReinstall_NEW_Field_3
|
||||
msgid "Do not uninstall"
|
||||
msgstr "Do not uninstall"
|
||||
|
||||
#. PageReinstall_NEW_MUI_HEADER_TEXT_TITLE
|
||||
msgid "Already Installed"
|
||||
msgstr "Already Installed"
|
||||
|
||||
#. PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE
|
||||
msgid "Choose how you want to install ${APPLICATION_NAME}."
|
||||
msgstr "Choose how you want to install ${APPLICATION_NAME}."
|
||||
|
||||
#. PageReinstall_OLD_Field_1
|
||||
msgid ""
|
||||
"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."
|
||||
msgstr "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."
|
||||
|
||||
#. PageReinstall_SAME_Field_1
|
||||
msgid ""
|
||||
"${APPLICATION_NAME} ${VERSION} is already installed.$\r$\n"
|
||||
"Select the operation you want to perform and click Next to continue."
|
||||
msgstr "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||
|
||||
#. PageReinstall_SAME_Field_2
|
||||
msgid "Add/Reinstall components"
|
||||
msgstr "Add/Reinstall components"
|
||||
|
||||
#. PageReinstall_SAME_Field_3 UNINSTALLER_APPDATA_TITLE
|
||||
msgid "Uninstall ${APPLICATION_NAME}"
|
||||
msgstr "Uninstall ${APPLICATION_NAME}"
|
||||
|
||||
#. PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE
|
||||
msgid "Choose the maintenance option to perform."
|
||||
msgstr "Choose the maintenance option to perform."
|
||||
|
||||
#. SEC_APPLICATION_DETAILS
|
||||
msgid "Installing ${APPLICATION_NAME} essentials."
|
||||
msgstr "Installing ${APPLICATION_NAME} essentials."
|
||||
|
||||
#. OPTION_SECTION_SC_SHELL_EXT_SECTION
|
||||
msgid "Integration for Windows Explorer"
|
||||
msgstr "Integration for Windows Explorer"
|
||||
|
||||
#. OPTION_SECTION_SC_SHELL_EXT_DetailPrint
|
||||
msgid "Installing Integration for Windows Explorer"
|
||||
msgstr "Installing Integration for Windows Explorer"
|
||||
|
||||
#. OPTION_SECTION_SC_START_MENU_SECTION
|
||||
msgid "Start Menu Program Shortcut"
|
||||
msgstr "Start Menu Program Shortcut"
|
||||
|
||||
#. OPTION_SECTION_SC_START_MENU_DetailPrint
|
||||
msgid "Adding shortcut for ${APPLICATION_NAME} to the Start Menu."
|
||||
msgstr "Adding shortcut for ${APPLICATION_NAME} to the Start Menu."
|
||||
|
||||
#. OPTION_SECTION_SC_DESKTOP_SECTION
|
||||
msgid "Desktop Shortcut"
|
||||
msgstr "Desktop Shortcut"
|
||||
|
||||
#. OPTION_SECTION_SC_DESKTOP_DetailPrint
|
||||
msgid "Creating Desktop Shortcuts"
|
||||
msgstr "Creating Desktop Shortcuts"
|
||||
|
||||
#. OPTION_SECTION_SC_QUICK_LAUNCH_SECTION
|
||||
msgid "Quick Launch Shortcut"
|
||||
msgstr "Quick Launch Shortcut"
|
||||
|
||||
#. OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint
|
||||
msgid "Creating Quick Launch Shortcut"
|
||||
msgstr "Creating Quick Launch Shortcut"
|
||||
|
||||
#. OPTION_SECTION_SC_APPLICATION_Desc
|
||||
msgid "${APPLICATION_NAME} essentials."
|
||||
msgstr "${APPLICATION_NAME} essentials."
|
||||
|
||||
#. OPTION_SECTION_SC_START_MENU_Desc
|
||||
msgid "${APPLICATION_NAME} shortcut."
|
||||
msgstr "${APPLICATION_NAME} shortcut."
|
||||
|
||||
#. OPTION_SECTION_SC_DESKTOP_Desc
|
||||
msgid "Desktop shortcut for ${APPLICATION_NAME}."
|
||||
msgstr "Desktop shortcut for ${APPLICATION_NAME}."
|
||||
|
||||
#. OPTION_SECTION_SC_QUICK_LAUNCH_Desc
|
||||
msgid "Quick Launch shortcut for ${APPLICATION_NAME}."
|
||||
msgstr "Quick Launch shortcut for ${APPLICATION_NAME}."
|
||||
|
||||
#. UNINSTALLER_FILE_Detail
|
||||
msgid "Writing Uninstaller"
|
||||
msgstr "Writing Uninstaller"
|
||||
|
||||
#. UNINSTALLER_REGISTRY_Detail
|
||||
msgid "Writing Installer Registry Keys"
|
||||
msgstr "Writing Installer Registry Keys"
|
||||
|
||||
#. UNINSTALLER_FINISHED_Detail
|
||||
msgid "Finished"
|
||||
msgstr "Finished"
|
||||
|
||||
#. UNINSTALL_MESSAGEBOX
|
||||
msgid ""
|
||||
"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r"
|
||||
"$\n"
|
||||
"Continue anyway (not recommended)?"
|
||||
msgstr "It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
|
||||
|
||||
#. UNINSTALL_ABORT
|
||||
msgid "Uninstall aborted by user"
|
||||
msgstr "Uninstall aborted by user"
|
||||
|
||||
#. INIT_NO_QUICK_LAUNCH
|
||||
msgid "Quick Launch Shortcut (N/A)"
|
||||
msgstr "Quick Launch Shortcut (N/A)"
|
||||
|
||||
#. INIT_NO_DESKTOP
|
||||
msgid "Desktop Shortcut (overwrites existing)"
|
||||
msgstr "Desktop Shortcut (overwrites existing)"
|
||||
|
||||
#. UAC_ERROR_ELEVATE
|
||||
msgid "Unable to elevate, error:"
|
||||
msgstr "Unable to elevate, error:"
|
||||
|
||||
#. UAC_INSTALLER_REQUIRE_ADMIN
|
||||
msgid "This installer requires admin access, try again"
|
||||
msgstr "This installer requires admin access, try again"
|
||||
|
||||
#. INIT_INSTALLER_RUNNING
|
||||
msgid "The installer is already running."
|
||||
msgstr "The installer is already running."
|
||||
|
||||
#. UAC_UNINSTALLER_REQUIRE_ADMIN
|
||||
msgid "This uninstaller requires admin access, try again"
|
||||
msgstr "This uninstaller requires admin access, try again"
|
||||
|
||||
#. UAC_ERROR_LOGON_SERVICE
|
||||
msgid "Logon service is not running, aborting!"
|
||||
msgstr "Logon service is not running, aborting!"
|
||||
|
||||
#. INIT_UNINSTALLER_RUNNING
|
||||
msgid "The uninstaller is already running."
|
||||
msgstr "The uninstaller is already running."
|
||||
|
||||
#. SectionGroup_Shortcuts
|
||||
msgid "Shortcuts"
|
||||
msgstr "Shortcuts"
|
||||
|
||||
63
admin/win/tools/CMakeLists.txt
Normal file
63
admin/win/tools/CMakeLists.txt
Normal file
@@ -0,0 +1,63 @@
|
||||
cmake_minimum_required(VERSION 3.2)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P MATCHES 4)
|
||||
set(BITNESS 32)
|
||||
else()
|
||||
set(BITNESS 64)
|
||||
endif()
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
NCToolsShared
|
||||
)
|
||||
|
||||
add_definitions(-DUNICODE)
|
||||
add_definitions(-D_UNICODE)
|
||||
add_definitions(-DNDEBUG)
|
||||
add_definitions(-D_WINDOWS)
|
||||
|
||||
# Get APIs from from Vista onwards.
|
||||
add_definitions(-D_WIN32_WINNT=0x0601)
|
||||
add_definitions(-DWINVER=0x0601)
|
||||
|
||||
# Use automatic overload for suitable CRT safe-functions
|
||||
# See https://docs.microsoft.com/de-de/cpp/c-runtime-library/security-features-in-the-crt?view=vs-2019
|
||||
add_definitions(-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1)
|
||||
# Also: Disable compiler warnings because we don't use Windows CRT safe-functions explicitly and don't intend to
|
||||
# as this is a pure cross-platform source the only alternative would be a ton of ifdefs with calls to the _s version
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||
|
||||
# Optimize for size
|
||||
set(COMPILER_FLAGS "/GL /O1 /sdl /Zc:inline /Oi /EHsc /nologo")
|
||||
set(LINKER_FLAGS "/LTCG /OPT:REF /SUBSYSTEM:WINDOWS /NOLOGO")
|
||||
|
||||
# Enable DEP, ASLR and CFG
|
||||
set(LINKER_FLAGS "${LINKER_FLAGS} /nxcompat /dynamicbase /guard:cf")
|
||||
|
||||
# x86 only: Enable SafeSEH
|
||||
if(CMAKE_SIZEOF_VOID_P MATCHES 4)
|
||||
set(LINKER_FLAGS "${LINKER_FLAGS} /safeseh")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMPILER_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILER_FLAGS}")
|
||||
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}")
|
||||
|
||||
# Use static runtime for all subdirectories
|
||||
foreach(buildType "" "_DEBUG" "_MINSIZEREL" "_RELEASE" "_RELWITHDEBINFO")
|
||||
string(REPLACE "/MD" "/MT" "CMAKE_CXX_FLAGS${buildType}" "${CMAKE_CXX_FLAGS${buildType}}")
|
||||
endforeach()
|
||||
|
||||
add_subdirectory(NCToolsShared)
|
||||
|
||||
if(BUILD_WIN_MSI)
|
||||
add_subdirectory(NCMsiHelper)
|
||||
endif()
|
||||
|
||||
if(BUILD_WIN_TOOLS)
|
||||
add_subdirectory(NCNavRemove)
|
||||
endif()
|
||||
41
admin/win/tools/NCMsiHelper/CMakeLists.txt
Normal file
41
admin/win/tools/NCMsiHelper/CMakeLists.txt
Normal file
@@ -0,0 +1,41 @@
|
||||
# Find WiX Toolset
|
||||
if(NOT DEFINED ENV{WIX})
|
||||
# Example: WIX=C:\Program Files (x86)\WiX Toolset v3.11\
|
||||
message(FATAL_ERROR "WiX Toolset path not set (environment variable 'WIX'). Please install the WiX Toolset.")
|
||||
else()
|
||||
set(WIX_SDK_PATH $ENV{WIX}/SDK/VS2017)
|
||||
message(STATUS "WiX Toolset SDK path: ${WIX_SDK_PATH}")
|
||||
endif()
|
||||
|
||||
include_directories(${WIX_SDK_PATH}/inc)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P MATCHES 4)
|
||||
link_directories(${WIX_SDK_PATH}/lib/x86)
|
||||
else()
|
||||
link_directories(${WIX_SDK_PATH}/lib/x64)
|
||||
endif()
|
||||
|
||||
add_definitions(-D_NCMSIHELPER_EXPORTS)
|
||||
add_definitions(-D_USRDLL)
|
||||
add_definitions(-D_WINDLL)
|
||||
|
||||
set(TARGET_NAME NCMsiHelper${BITNESS})
|
||||
|
||||
add_library(${TARGET_NAME} MODULE
|
||||
CustomAction.cpp
|
||||
CustomAction.def
|
||||
LogResult.cpp
|
||||
NCMsiHelper.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(${TARGET_NAME}
|
||||
NCToolsShared
|
||||
)
|
||||
|
||||
install(TARGETS ${TARGET_NAME}
|
||||
DESTINATION msi/
|
||||
)
|
||||
install(FILES
|
||||
NCMsiHelper.wxs
|
||||
DESTINATION msi/
|
||||
)
|
||||
118
admin/win/tools/NCMsiHelper/CustomAction.cpp
Normal file
118
admin/win/tools/NCMsiHelper/CustomAction.cpp
Normal file
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* Parts of this file are based on:
|
||||
* https://www.codeproject.com/articles/570751/devmsi-an-example-cplusplus-msi-wix-deferred-custo
|
||||
*
|
||||
* Licensed under the The Code Project Open License (CPOL):
|
||||
* https://www.codeproject.com/info/cpol10.aspx
|
||||
*
|
||||
*/
|
||||
|
||||
#include "NCMsiHelper.h"
|
||||
|
||||
/**
|
||||
* Sets up logging for MSIs and then calls the appropriate custom action with argc/argv parameters.
|
||||
*
|
||||
* MSI deferred custom action dlls have to handle parameters (properties) a little differently,
|
||||
* since the deferred action may not have an active session when it begins. Since the easiest
|
||||
* way to pass parameter(s) is to put them all into a CustomActionData property and then retrieve it,
|
||||
* the easiest thing to do on this ( C/C++ ) end is to pull the parameter and then split it into
|
||||
* a list of parameter(s) that we need.
|
||||
*
|
||||
* For this implementation, it made sense to treat the single string provided in CustomActionData
|
||||
* as if it were a command line, and then parse it out just as if it were a command line. Obviously,
|
||||
* the "program name" isn't going to be the first argument unless the MSI writer is pedantic, but
|
||||
* otherwise it seems to be a good way to do it.
|
||||
*
|
||||
* Since all entry points need to do this same work, it was easiest to have a single function that
|
||||
* would do the setup, pull the CustomActionData parameter, split it into an argc/argv style of
|
||||
* argument list, and then pass that argument list into a function that actually does something
|
||||
* interesting.
|
||||
*
|
||||
* @param hInstall The hInstall parameter provided by MSI/WiX.
|
||||
* @param func The function to be called with argc/argv parameters.
|
||||
* @param actionName The text description of the function. It will be put in the log.
|
||||
* @return Returns ERROR_SUCCESS or ERROR_INSTALL_FAILURE.
|
||||
*/
|
||||
UINT CustomActionArgcArgv(MSIHANDLE hInstall, CUSTOM_ACTION_ARGC_ARGV func, LPCSTR actionName)
|
||||
{
|
||||
LPWSTR pszCustomActionData = nullptr, *argv = nullptr;
|
||||
|
||||
HRESULT hr = WcaInitialize(hInstall, actionName);
|
||||
ExitOnFailure(hr, "Failed to initialize");
|
||||
|
||||
WcaLog(LOGMSG_STANDARD, "Initialized.");
|
||||
|
||||
// Retrieve our custom action property. This is one of
|
||||
// only three properties we can request on a Deferred
|
||||
// Custom Action. So, we assume the caller puts all
|
||||
// parameters in this one property.
|
||||
hr = WcaGetProperty(L"CustomActionData", &pszCustomActionData);
|
||||
ExitOnFailure(hr, "Failed to get Custom Action Data.");
|
||||
WcaLog(LOGMSG_STANDARD, "Custom Action Data = '%ls'.", pszCustomActionData);
|
||||
|
||||
// Convert the string retrieved into a standard argc/arg layout
|
||||
// (ignoring the fact that the first parameter is whatever was
|
||||
// passed, not necessarily the application name/path).
|
||||
int argc = 0;
|
||||
argv = CommandLineToArgvW(pszCustomActionData, &argc);
|
||||
if (argv) {
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
ExitOnFailure(hr, "Failed to convert Custom Action Data to argc/argv.");
|
||||
}
|
||||
|
||||
hr = (func)(argc, argv);
|
||||
ExitOnFailure(hr, "Custom action failed");
|
||||
|
||||
LExit:
|
||||
// Resource freeing here!
|
||||
ReleaseStr(pszCustomActionData);
|
||||
if (argv)
|
||||
LocalFree(argv);
|
||||
|
||||
return WcaFinalize(SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE);
|
||||
}
|
||||
|
||||
UINT __stdcall ExecNsisUninstaller(MSIHANDLE hInstall)
|
||||
{
|
||||
return CustomActionArgcArgv(hInstall, DoExecNsisUninstaller, "ExecNsisUninstaller");
|
||||
}
|
||||
|
||||
UINT __stdcall RemoveNavigationPaneEntries(MSIHANDLE hInstall)
|
||||
{
|
||||
return CustomActionArgcArgv(hInstall, DoRemoveNavigationPaneEntries, "RemoveNavigationPaneEntries");
|
||||
}
|
||||
|
||||
/**
|
||||
* DllMain - Initialize and cleanup WiX custom action utils.
|
||||
*/
|
||||
extern "C" BOOL WINAPI DllMain(
|
||||
__in HINSTANCE hInst,
|
||||
__in ULONG ulReason,
|
||||
__in LPVOID
|
||||
)
|
||||
{
|
||||
switch(ulReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
WcaGlobalInitialize(hInst);
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
WcaGlobalFinalize();
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
3
admin/win/tools/NCMsiHelper/CustomAction.def
Normal file
3
admin/win/tools/NCMsiHelper/CustomAction.def
Normal file
@@ -0,0 +1,3 @@
|
||||
EXPORTS
|
||||
ExecNsisUninstaller
|
||||
RemoveNavigationPaneEntries
|
||||
134
admin/win/tools/NCMsiHelper/LogResult.cpp
Normal file
134
admin/win/tools/NCMsiHelper/LogResult.cpp
Normal file
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* Parts of this file are based on:
|
||||
* https://www.codeproject.com/articles/570751/devmsi-an-example-cplusplus-msi-wix-deferred-custo
|
||||
*
|
||||
* Licensed under the The Code Project Open License (CPOL):
|
||||
* https://www.codeproject.com/info/cpol10.aspx
|
||||
*
|
||||
*/
|
||||
|
||||
#include "NCMsiHelper.h"
|
||||
|
||||
//
|
||||
// This code modified from MSDN article 256348
|
||||
// "How to obtain error message descriptions using the FormatMessage API"
|
||||
// Currently found at http://support.microsoft.com/kb/256348/en-us
|
||||
|
||||
#define ERRMSGBUFFERSIZE 256
|
||||
|
||||
/**
|
||||
* Use FormatMessage() to look an error code and log the error text.
|
||||
*
|
||||
* @param dwErrorMsgId The error code to be investigated.
|
||||
*/
|
||||
void LogError(DWORD dwErrorMsgId)
|
||||
{
|
||||
HLOCAL pBuffer = nullptr; // Buffer to hold the textual error description.
|
||||
DWORD ret = 0; // Temp space to hold a return value.
|
||||
HINSTANCE hInst = nullptr; // Instance handle for DLL.
|
||||
bool doLookup = true;
|
||||
DWORD dwMessageId = dwErrorMsgId;
|
||||
LPCSTR pMessage = "Error %d";
|
||||
DWORD flags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS;
|
||||
|
||||
if (HRESULT_FACILITY(dwErrorMsgId) == FACILITY_MSMQ) {
|
||||
hInst = LoadLibrary(TEXT("MQUTIL.DLL"));
|
||||
flags |= FORMAT_MESSAGE_FROM_HMODULE;
|
||||
doLookup = (nullptr != hInst);
|
||||
} else if (dwErrorMsgId >= NERR_BASE && dwErrorMsgId <= MAX_NERR) {
|
||||
hInst = LoadLibrary(TEXT("NETMSG.DLL"));
|
||||
flags |= FORMAT_MESSAGE_FROM_HMODULE;
|
||||
doLookup = (nullptr != hInst);
|
||||
} else if (HRESULT_FACILITY(dwErrorMsgId) == FACILITY_WIN32) {
|
||||
// A "GetLastError" error, drop the HRESULT_FACILITY
|
||||
dwMessageId &= 0x0000FFFF;
|
||||
flags |= FORMAT_MESSAGE_FROM_SYSTEM;
|
||||
}
|
||||
|
||||
if (doLookup) {
|
||||
ret = FormatMessageA(
|
||||
flags,
|
||||
hInst, // Handle to the DLL.
|
||||
dwMessageId, // Message identifier.
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language.
|
||||
reinterpret_cast<LPSTR>(&pBuffer), // Buffer that will hold the text string.
|
||||
ERRMSGBUFFERSIZE, // Allocate at least this many chars for pBuffer.
|
||||
nullptr // No insert values.
|
||||
);
|
||||
}
|
||||
|
||||
if (0 < ret && nullptr != pBuffer) {
|
||||
pMessage = static_cast<LPSTR>(pBuffer);
|
||||
}
|
||||
|
||||
// Display the string.
|
||||
if (WcaIsInitialized()) {
|
||||
WcaLogError(dwErrorMsgId, pMessage, dwMessageId);
|
||||
} else {
|
||||
// Log to stdout/stderr
|
||||
fprintf_s(stderr, pMessage, dwMessageId);
|
||||
if ('\n' != pMessage[strlen(pMessage) - 1]) {
|
||||
fprintf_s(stderr, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Free the buffer.
|
||||
LocalFree(pBuffer);
|
||||
}
|
||||
|
||||
void LogResult(
|
||||
__in HRESULT hr,
|
||||
__in_z __format_string PCSTR fmt, ...
|
||||
)
|
||||
{
|
||||
// This code taken from MSDN vsprintf example found currently at
|
||||
// http://msdn.microsoft.com/en-us/library/28d5ce15(v=vs.71).aspx
|
||||
// ...and then modified... because it doesn't seem to work!
|
||||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4996)
|
||||
const auto len = _vsnprintf(nullptr, 0, fmt, args) + 1;
|
||||
#pragma warning(pop)
|
||||
auto buffer = static_cast<char*>(malloc(len * sizeof(char)));
|
||||
|
||||
#ifdef _DEBUG
|
||||
::ZeroMemory(buffer, len);
|
||||
#endif // _DEBUG
|
||||
_vsnprintf_s(buffer, len, len - 1, fmt, args);
|
||||
|
||||
// (MSDN code complete)
|
||||
|
||||
// Now that the buffer holds the formatted string, send it to
|
||||
// the appropriate output.
|
||||
if (WcaIsInitialized()) {
|
||||
if (FAILED(hr)) {
|
||||
WcaLogError(hr, buffer);
|
||||
LogError(hr);
|
||||
} else {
|
||||
WcaLog(LOGMSG_STANDARD, buffer);
|
||||
}
|
||||
} else { // Log to stdout/stderr
|
||||
if (FAILED(hr)) {
|
||||
fprintf_s(stderr, "%s\n", buffer);
|
||||
LogError(hr);
|
||||
} else {
|
||||
fprintf_s(stdout, "%s\n", buffer);
|
||||
}
|
||||
}
|
||||
|
||||
free(buffer);
|
||||
}
|
||||
48
admin/win/tools/NCMsiHelper/LogResult.h
Normal file
48
admin/win/tools/NCMsiHelper/LogResult.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* Parts of this file are based on:
|
||||
* https://www.codeproject.com/articles/570751/devmsi-an-example-cplusplus-msi-wix-deferred-custo
|
||||
*
|
||||
* Licensed under the The Code Project Open License (CPOL):
|
||||
* https://www.codeproject.com/info/cpol10.aspx
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Function prototype for LogResult()
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
/**
|
||||
* Log a message.
|
||||
*
|
||||
* If the DLL is being used in a WiX MSI environment, LogResult() will
|
||||
* route any log messages to the MSI log file via WcaLog() or WcaLogError().
|
||||
*
|
||||
* If the DLL is NOT being used in a WiX MSI environment, LogResult() will
|
||||
* route any log messages to stdout or stderr.
|
||||
*
|
||||
* If the result is an error code, LogResult will attempt to gather a
|
||||
* text version of the error code and place it in the log. For example,
|
||||
* if the error code means ERROR_FILE_NOT_FOUND, it will look up the appropriate
|
||||
* message ( via FormatMessage() ) and add "The system cannot find the file specified."
|
||||
* to the log.
|
||||
*
|
||||
* @param hr The HRESULT to be interrogated for success or failure.
|
||||
* @param fmt The string format for a user-specified error message.
|
||||
*/
|
||||
void LogResult(
|
||||
__in HRESULT hr,
|
||||
__in_z __format_string PCSTR fmt, ...
|
||||
);
|
||||
84
admin/win/tools/NCMsiHelper/NCMsiHelper.cpp
Normal file
84
admin/win/tools/NCMsiHelper/NCMsiHelper.cpp
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include "NCMsiHelper.h"
|
||||
#include "utility.h"
|
||||
#include "LogResult.h"
|
||||
|
||||
using namespace NCTools;
|
||||
|
||||
HRESULT NCMSIHELPER_API DoExecNsisUninstaller(int argc, LPWSTR *argv)
|
||||
{
|
||||
if (argc != 2) {
|
||||
return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
const auto appShortName = std::wstring(argv[0]);
|
||||
const auto uninstallExePath = std::wstring(argv[1]);
|
||||
|
||||
if (appShortName.empty()
|
||||
|| uninstallExePath.empty()) {
|
||||
return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
auto appInstallDir = uninstallExePath;
|
||||
const auto posLastSlash = appInstallDir.find_last_of(PathSeparator);
|
||||
if (posLastSlash != std::wstring::npos) {
|
||||
appInstallDir.erase(posLastSlash);
|
||||
} else {
|
||||
return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
// Run uninstaller
|
||||
const std::wstring cmd = L'\"' + uninstallExePath + L"\" /S _?=" + appInstallDir;
|
||||
LogResult(S_OK, "Running '%ls'.", cmd.data());
|
||||
Utility::execCmd(cmd);
|
||||
|
||||
LogResult(S_OK, "Waiting for NSIS uninstaller.");
|
||||
|
||||
// Can't wait for the process because Uninstall.exe (opposed to Setup.exe) immediately returns, so we'll sleep a bit.
|
||||
Utility::waitForNsisUninstaller(appShortName);
|
||||
|
||||
LogResult(S_OK, "Removing the NSIS uninstaller.");
|
||||
|
||||
// Sleep a bit and clean up the NSIS mess
|
||||
Sleep(1500);
|
||||
DeleteFile(uninstallExePath.data());
|
||||
RemoveDirectory(appInstallDir.data());
|
||||
|
||||
LogResult(S_OK, "Finished.");
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT NCMSIHELPER_API DoRemoveNavigationPaneEntries(int argc, LPWSTR *argv)
|
||||
{
|
||||
if (argc != 1) {
|
||||
return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
const auto appName = std::wstring(argv[0]);
|
||||
|
||||
if (appName.empty()) {
|
||||
return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
LogResult(S_OK, "Removing '%ls' sync folders from Explorer's Navigation Pane for the current user.", appName.data());
|
||||
|
||||
Utility::removeNavigationPaneEntries(appName);
|
||||
|
||||
LogResult(S_OK, "Finished.");
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
99
admin/win/tools/NCMsiHelper/NCMsiHelper.h
Normal file
99
admin/win/tools/NCMsiHelper/NCMsiHelper.h
Normal file
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* Parts of this file are based on:
|
||||
* https://www.codeproject.com/articles/570751/devmsi-an-example-cplusplus-msi-wix-deferred-custo
|
||||
*
|
||||
* Licensed under the The Code Project Open License (CPOL):
|
||||
* https://www.codeproject.com/info/cpol10.aspx
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Function prototypes for external "C" interfaces into the DLL.
|
||||
*
|
||||
* This project builds a "hybrid" DLL that will work either from
|
||||
* a MSI Custom Action environment or from an external C program.
|
||||
* The former routes through "C" interface functions defined in
|
||||
* CustomAction.def. The latter uses the interfaces defined here.
|
||||
*
|
||||
* This header is suitable for inclusion by a project wanting to
|
||||
* call these methods. Note that _NCMSIHELPER_EXPORTS should not be
|
||||
* defined for the accessing application source code.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#ifdef _NCMSIHELPER_EXPORTS
|
||||
# pragma comment (lib, "newdev")
|
||||
# pragma comment (lib, "setupapi")
|
||||
# pragma comment (lib, "msi")
|
||||
# pragma comment (lib, "dutil")
|
||||
# pragma comment (lib, "wcautil")
|
||||
# pragma comment (lib, "Version")
|
||||
|
||||
# include <cstdlib>
|
||||
# include <string>
|
||||
# include <tchar.h>
|
||||
# include <msiquery.h>
|
||||
# include <lmerr.h>
|
||||
|
||||
// WiX Header Files:
|
||||
# include <wcautil.h>
|
||||
# include <strutil.h>
|
||||
|
||||
# define NCMSIHELPER_API __declspec(dllexport)
|
||||
#else
|
||||
# define NCMSIHELPER_API __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Runs the NSIS uninstaller and waits for its completion.
|
||||
*
|
||||
* argc MUST be 2.
|
||||
*
|
||||
* argv[0] is APPLICATION_EXECUTABLE, e.g. "nextcloud"
|
||||
* argv[1] is the full path to "Uninstall.exe"
|
||||
*
|
||||
* @param argc The count of valid arguments in argv.
|
||||
* @param argv An array of string arguments for the function.
|
||||
* @return Returns an HRESULT indicating success or failure.
|
||||
*/
|
||||
HRESULT NCMSIHELPER_API DoExecNsisUninstaller(int argc, LPWSTR *argv);
|
||||
|
||||
|
||||
/**
|
||||
* Removes the Explorer's Navigation Pane entries.
|
||||
*
|
||||
* argc MUST be 1.
|
||||
*
|
||||
* argv[0] is APPLICATION_NAME, e.g. "Nextcloud"
|
||||
*
|
||||
* @param argc The count of valid arguments in argv.
|
||||
* @param argv An array of string arguments for the function.
|
||||
* @return Returns an HRESULT indicating success or failure.
|
||||
*/
|
||||
HRESULT NCMSIHELPER_API DoRemoveNavigationPaneEntries(int argc, LPWSTR *argv);
|
||||
|
||||
/**
|
||||
* Standardized function prototype for NCMsiHelper.
|
||||
*
|
||||
* Functions in NCMsiHelper can be called through the MSI Custom
|
||||
* Action DLL or through an external C program. Both
|
||||
* methods expect to wrap things into this function prototype.
|
||||
*
|
||||
* As a result, all functions defined in this header should
|
||||
* conform to this function prototype.
|
||||
*/
|
||||
using CUSTOM_ACTION_ARGC_ARGV = NCMSIHELPER_API HRESULT(*)(int argc, LPWSTR *argv);
|
||||
43
admin/win/tools/NCMsiHelper/NCMsiHelper.wxs
Normal file
43
admin/win/tools/NCMsiHelper/NCMsiHelper.wxs
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
-->
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Fragment>
|
||||
|
||||
<?if $(var.Platform) = x64 ?>
|
||||
<?define bitness = "64" ?>
|
||||
<?else ?>
|
||||
<?define bitness = "32" ?>
|
||||
<?endif ?>
|
||||
|
||||
<Binary Id="NCMsiHelper" SourceFile="NCMsiHelper$(var.bitness).dll" />
|
||||
|
||||
<CustomAction Id="ExecNsisUninstaller"
|
||||
Return="ignore"
|
||||
BinaryKey="NCMsiHelper"
|
||||
DllEntry="ExecNsisUninstaller"
|
||||
Execute="deferred"
|
||||
Impersonate="no" />
|
||||
|
||||
<CustomAction Id="RemoveNavigationPaneEntries"
|
||||
Return="ignore"
|
||||
BinaryKey="NCMsiHelper"
|
||||
DllEntry="RemoveNavigationPaneEntries"
|
||||
Execute="deferred"
|
||||
Impersonate="yes" />
|
||||
|
||||
</Fragment>
|
||||
</Wix>
|
||||
14
admin/win/tools/NCNavRemove/CMakeLists.txt
Normal file
14
admin/win/tools/NCNavRemove/CMakeLists.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
project(NCNavRemove)
|
||||
|
||||
set(MUTEX_NAME "NCNavRemove")
|
||||
|
||||
configure_file(NavRemoveConstants.h.in ${CMAKE_CURRENT_BINARY_DIR}/NavRemoveConstants.h)
|
||||
configure_file(NavRemove.ini.in ${CMAKE_CURRENT_BINARY_DIR}/NavRemove.ini)
|
||||
configure_file(version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
|
||||
|
||||
add_subdirectory(dll)
|
||||
add_subdirectory(exe)
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/NavRemove.ini
|
||||
DESTINATION tools/NCNavRemove/
|
||||
)
|
||||
77
admin/win/tools/NCNavRemove/ConfigIni.cpp
Normal file
77
admin/win/tools/NCNavRemove/ConfigIni.cpp
Normal file
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include "3rdparty/SimpleIni.h"
|
||||
#include "NavRemoveConstants.h"
|
||||
#include "ConfigIni.h"
|
||||
|
||||
ConfigIni::ConfigIni()
|
||||
{
|
||||
}
|
||||
|
||||
bool ConfigIni::load()
|
||||
{
|
||||
const DWORD bufferLen = GetCurrentDirectory(0, nullptr);
|
||||
TCHAR *pszBuffer = nullptr;
|
||||
|
||||
if (bufferLen == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
pszBuffer = new TCHAR[bufferLen];
|
||||
if (!pszBuffer) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::wstring filename;
|
||||
if (GetCurrentDirectory(bufferLen, pszBuffer) != 0) {
|
||||
filename = pszBuffer;
|
||||
}
|
||||
delete[] pszBuffer;
|
||||
|
||||
if (filename.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
filename.append(L"\\");
|
||||
filename.append(INI_NAME);
|
||||
|
||||
CSimpleIni ini;
|
||||
const wchar_t iniSection[] = CFG_KEY;
|
||||
const wchar_t iniKey[] = CFG_VAR_APPNAME;
|
||||
|
||||
const auto rc = ini.LoadFile(filename.data());
|
||||
|
||||
if (rc != SI_OK) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const auto pv = ini.GetValue(iniSection, iniKey);
|
||||
bool success = false;
|
||||
|
||||
if (pv) {
|
||||
_appName = pv;
|
||||
success = !_appName.empty();
|
||||
}
|
||||
|
||||
ini.Reset();
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
std::wstring ConfigIni::getAppName() const
|
||||
{
|
||||
return _appName;
|
||||
}
|
||||
30
admin/win/tools/NCNavRemove/ConfigIni.h
Normal file
30
admin/win/tools/NCNavRemove/ConfigIni.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
class ConfigIni
|
||||
{
|
||||
public:
|
||||
ConfigIni();
|
||||
|
||||
bool load();
|
||||
|
||||
std::wstring getAppName() const;
|
||||
|
||||
private:
|
||||
std::wstring _appName;
|
||||
};
|
||||
2
admin/win/tools/NCNavRemove/NavRemove.ini.in
Normal file
2
admin/win/tools/NCNavRemove/NavRemove.ini.in
Normal file
@@ -0,0 +1,2 @@
|
||||
[NavRemove]
|
||||
ApplicationName=@APPLICATION_NAME@
|
||||
9
admin/win/tools/NCNavRemove/NavRemoveConstants.h.in
Normal file
9
admin/win/tools/NCNavRemove/NavRemoveConstants.h.in
Normal file
@@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#define MUTEX_NAME L"@MUTEX_NAME@"
|
||||
#define TOOL_NAME L"NCNavRemove (@BITNESS@-bit)"
|
||||
#define TOOL_DESCRIPTION L"Removes all Explorer Navigation Pane entries for a given ApplicationName."
|
||||
|
||||
#define INI_NAME L"NavRemove.ini"
|
||||
#define CFG_KEY L"NavRemove"
|
||||
#define CFG_VAR_APPNAME L"ApplicationName"
|
||||
25
admin/win/tools/NCNavRemove/dll/CMakeLists.txt
Normal file
25
admin/win/tools/NCNavRemove/dll/CMakeLists.txt
Normal file
@@ -0,0 +1,25 @@
|
||||
add_definitions(-D_NAVREMOVE_EXPORTS)
|
||||
add_definitions(-D_USRDLL)
|
||||
add_definitions(-D_WINDLL)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/../
|
||||
)
|
||||
|
||||
set(TARGET_NAME libNavRemove${BITNESS})
|
||||
|
||||
add_library(${TARGET_NAME} MODULE
|
||||
dllmain.cpp
|
||||
NavRemove.cpp
|
||||
exports.def
|
||||
../ConfigIni.cpp
|
||||
${CMAKE_CURRENT_BINARY_DIR}/../version.rc
|
||||
)
|
||||
|
||||
target_link_libraries(${TARGET_NAME}
|
||||
NCToolsShared
|
||||
)
|
||||
|
||||
install(TARGETS ${TARGET_NAME}
|
||||
DESTINATION tools/NCNavRemove/dll/
|
||||
)
|
||||
40
admin/win/tools/NCNavRemove/dll/NavRemove.cpp
Normal file
40
admin/win/tools/NCNavRemove/dll/NavRemove.cpp
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include "utility.h"
|
||||
#include "NavRemove.h"
|
||||
#include "../ConfigIni.h"
|
||||
|
||||
using namespace NCTools;
|
||||
|
||||
extern bool g_alreadyRunning;
|
||||
|
||||
HRESULT NAVREMOVE_API RemoveNavigationPaneEntries()
|
||||
{
|
||||
if (g_alreadyRunning) {
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// Config
|
||||
ConfigIni ini;
|
||||
|
||||
if (!ini.load()) {
|
||||
return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
Utility::removeNavigationPaneEntries(ini.getAppName());
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
32
admin/win/tools/NCNavRemove/dll/NavRemove.h
Normal file
32
admin/win/tools/NCNavRemove/dll/NavRemove.h
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
// The following ifdef block is the standard way of creating macros which make exporting
|
||||
// from a DLL simpler. All files within this DLL are compiled with the _NAVREMOVE_EXPORTS
|
||||
// symbol defined on the command line. This symbol should not be defined on any project
|
||||
// that uses this DLL. This way any other project whose source files include this file see
|
||||
// NAVREMOVE_API functions as being imported from a DLL, whereas this DLL sees symbols
|
||||
// defined with this macro as being exported.
|
||||
|
||||
#ifdef _NAVREMOVE_EXPORTS
|
||||
#define NAVREMOVE_API __declspec(dllexport)
|
||||
#else
|
||||
#define NAVREMOVE_API __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
NAVREMOVE_API HRESULT RemoveNavigationPaneEntries();
|
||||
42
admin/win/tools/NCNavRemove/dll/dllmain.cpp
Normal file
42
admin/win/tools/NCNavRemove/dll/dllmain.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include "SimpleNamedMutex.h"
|
||||
#include "NavRemoveConstants.h"
|
||||
|
||||
SimpleNamedMutex g_mutex(std::wstring(MUTEX_NAME));
|
||||
bool g_alreadyRunning = false;
|
||||
|
||||
extern "C" BOOL WINAPI DllMain(
|
||||
__in HINSTANCE hInst,
|
||||
__in ULONG ulReason,
|
||||
__in LPVOID
|
||||
)
|
||||
{
|
||||
switch(ulReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
// Mutex
|
||||
g_alreadyRunning = !g_mutex.lock();
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
// Release mutex
|
||||
g_mutex.unlock();
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
2
admin/win/tools/NCNavRemove/dll/exports.def
Normal file
2
admin/win/tools/NCNavRemove/dll/exports.def
Normal file
@@ -0,0 +1,2 @@
|
||||
EXPORTS
|
||||
RemoveNavigationPaneEntries
|
||||
19
admin/win/tools/NCNavRemove/exe/CMakeLists.txt
Normal file
19
admin/win/tools/NCNavRemove/exe/CMakeLists.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
set(TARGET_NAME NavRemove${BITNESS})
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/../
|
||||
)
|
||||
|
||||
add_executable(${TARGET_NAME} WIN32
|
||||
main.cpp
|
||||
../ConfigIni.cpp
|
||||
${CMAKE_CURRENT_BINARY_DIR}/../version.rc
|
||||
)
|
||||
|
||||
target_link_libraries(${TARGET_NAME}
|
||||
NCToolsShared
|
||||
)
|
||||
|
||||
install(TARGETS ${TARGET_NAME}
|
||||
DESTINATION tools/NCNavRemove/exe/
|
||||
)
|
||||
53
admin/win/tools/NCNavRemove/exe/main.cpp
Normal file
53
admin/win/tools/NCNavRemove/exe/main.cpp
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include "utility.h"
|
||||
#include "SimpleNamedMutex.h"
|
||||
#include "NavRemoveConstants.h"
|
||||
#include "../ConfigIni.h"
|
||||
|
||||
using namespace NCTools;
|
||||
|
||||
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
|
||||
_In_opt_ HINSTANCE hPrevInstance,
|
||||
_In_ LPWSTR lpCmdLine,
|
||||
_In_ int nCmdShow)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(hInstance);
|
||||
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||
UNREFERENCED_PARAMETER(nCmdShow);
|
||||
|
||||
// Mutex
|
||||
SimpleNamedMutex mutex(std::wstring(MUTEX_NAME));
|
||||
|
||||
if (!mutex.lock()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Config
|
||||
ConfigIni ini;
|
||||
|
||||
if (!ini.load()) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
Utility::removeNavigationPaneEntries(ini.getAppName());
|
||||
|
||||
// Release mutex
|
||||
mutex.unlock();
|
||||
|
||||
return 0;
|
||||
}
|
||||
40
admin/win/tools/NCNavRemove/version.rc.in
Normal file
40
admin/win/tools/NCNavRemove/version.rc.in
Normal file
@@ -0,0 +1,40 @@
|
||||
#include "winresrc.h"
|
||||
#include "NavRemoveConstants.h"
|
||||
|
||||
#define VER_FILEVERSION @MIRALL_VERSION_MAJOR@,@MIRALL_VERSION_MINOR@,@MIRALL_VERSION_PATCH@,@MIRALL_VERSION_BUILD@
|
||||
#define VER_FILEVERSION_STR "@MIRALL_VERSION_MAJOR@.@MIRALL_VERSION_MINOR@.@MIRALL_VERSION_PATCH@.@MIRALL_VERSION_BUILD@\0"
|
||||
|
||||
#define VER_PRODUCTVERSION @MIRALL_VERSION_MAJOR@,@MIRALL_VERSION_MINOR@,@MIRALL_VERSION_PATCH@,@MIRALL_VERSION_BUILD@
|
||||
#define VER_PRODUCTVERSION_STR "@MIRALL_VERSION_MAJOR@.@MIRALL_VERSION_MINOR@.@MIRALL_VERSION_PATCH@.@MIRALL_VERSION_BUILD@\0"
|
||||
|
||||
#define VER_PRODUCTNAME_STR TOOL_NAME
|
||||
#define VER_COMPANYNAME_STR "@APPLICATION_VENDOR@"
|
||||
#define VER_COPYRIGHT_STR "(c) @MIRALL_VERSION_YEAR@"
|
||||
|
||||
#define VER_PRODUCTDESC_STR TOOL_DESCRIPTION
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION VER_FILEVERSION
|
||||
PRODUCTVERSION VER_PRODUCTVERSION
|
||||
FILEOS VOS__WINDOWS32
|
||||
FILETYPE VFT_APP
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "080904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", VER_COMPANYNAME_STR
|
||||
VALUE "LegalCopyright", VER_COPYRIGHT_STR
|
||||
VALUE "FileVersion", VER_FILEVERSION_STR
|
||||
VALUE "Comment", VER_PRODUCTNAME_STR
|
||||
VALUE "FileDescription", VER_PRODUCTDESC_STR
|
||||
VALUE "ProductName", VER_PRODUCTNAME_STR
|
||||
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
|
||||
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x809, 1200
|
||||
END
|
||||
END
|
||||
3474
admin/win/tools/NCToolsShared/3rdparty/SimpleIni.h
vendored
Normal file
3474
admin/win/tools/NCToolsShared/3rdparty/SimpleIni.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
4
admin/win/tools/NCToolsShared/CMakeLists.txt
Normal file
4
admin/win/tools/NCToolsShared/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
add_library(NCToolsShared STATIC
|
||||
utility_win.cpp
|
||||
SimpleNamedMutex.cpp
|
||||
)
|
||||
48
admin/win/tools/NCToolsShared/SimpleNamedMutex.cpp
Normal file
48
admin/win/tools/NCToolsShared/SimpleNamedMutex.cpp
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include "SimpleNamedMutex.h"
|
||||
|
||||
SimpleNamedMutex::SimpleNamedMutex(const std::wstring &name)
|
||||
{
|
||||
_name = name;
|
||||
}
|
||||
|
||||
bool SimpleNamedMutex::lock()
|
||||
{
|
||||
if (_name.empty() || _hMutex) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Mutex
|
||||
_hMutex = CreateMutex(nullptr, TRUE, _name.data());
|
||||
|
||||
if (GetLastError() == ERROR_ALREADY_EXISTS) {
|
||||
CloseHandle(_hMutex);
|
||||
_hMutex = nullptr;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SimpleNamedMutex::unlock()
|
||||
{
|
||||
// Release mutex
|
||||
if (_hMutex) {
|
||||
ReleaseMutex(_hMutex);
|
||||
CloseHandle(_hMutex);
|
||||
_hMutex = nullptr;
|
||||
}
|
||||
}
|
||||
31
admin/win/tools/NCToolsShared/SimpleNamedMutex.h
Normal file
31
admin/win/tools/NCToolsShared/SimpleNamedMutex.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <windows.h>
|
||||
#include <string>
|
||||
|
||||
class SimpleNamedMutex
|
||||
{
|
||||
public:
|
||||
SimpleNamedMutex(const std::wstring &name);
|
||||
|
||||
bool lock();
|
||||
void unlock();
|
||||
|
||||
private:
|
||||
std::wstring _name;
|
||||
HANDLE _hMutex = nullptr;
|
||||
};
|
||||
58
admin/win/tools/NCToolsShared/utility.h
Normal file
58
admin/win/tools/NCToolsShared/utility.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
||||
* Copyright (C) by Daniel Molkentin <danimo@owncloud.com>
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <windows.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <variant>
|
||||
#include <functional>
|
||||
|
||||
namespace NCTools {
|
||||
|
||||
typedef std::variant<int, std::wstring, std::vector<unsigned char>> registryVariant;
|
||||
|
||||
static const std::wstring PathSeparator = L"\\";
|
||||
|
||||
namespace Utility {
|
||||
// Ported from libsync
|
||||
registryVariant registryGetKeyValue(HKEY hRootKey, const std::wstring& subKey, const std::wstring& valueName);
|
||||
bool registrySetKeyValue(HKEY hRootKey, const std::wstring &subKey, const std::wstring &valueName, DWORD type, const registryVariant &value);
|
||||
bool registryDeleteKeyTree(HKEY hRootKey, const std::wstring &subKey);
|
||||
bool registryDeleteKeyValue(HKEY hRootKey, const std::wstring &subKey, const std::wstring &valueName);
|
||||
bool registryWalkSubKeys(HKEY hRootKey, const std::wstring &subKey, const std::function<void(HKEY, const std::wstring&)> &callback);
|
||||
|
||||
// Ported from gui, modified to optionally rename matching files
|
||||
typedef std::function<void(const std::wstring&, std::wstring&)> copy_dir_recursive_callback;
|
||||
bool copy_dir_recursive(std::wstring from_dir, std::wstring to_dir, copy_dir_recursive_callback* callbackFileNameMatchReplace = nullptr);
|
||||
|
||||
// Created for native Win32
|
||||
DWORD execCmd(std::wstring cmd, bool wait = true);
|
||||
bool killProcess(const std::wstring &exePath);
|
||||
bool isValidDirectory(const std::wstring &path);
|
||||
std::wstring getAppRegistryString(const std::wstring &appVendor, const std::wstring &appName, const std::wstring &valueName);
|
||||
std::wstring getAppPath(const std::wstring &appVendor, const std::wstring &appName);
|
||||
std::wstring getConfigPath(const std::wstring &appName);
|
||||
void waitForNsisUninstaller(const std::wstring& appShortName);
|
||||
void removeNavigationPaneEntries(const std::wstring &appName);
|
||||
}
|
||||
|
||||
} // namespace NCTools
|
||||
477
admin/win/tools/NCToolsShared/utility_win.cpp
Normal file
477
admin/win/tools/NCToolsShared/utility_win.cpp
Normal file
@@ -0,0 +1,477 @@
|
||||
/*
|
||||
* Copyright (C) by Daniel Molkentin <danimo@owncloud.com>
|
||||
* Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "utility.h"
|
||||
#include <cassert>
|
||||
#include <algorithm>
|
||||
#include <Shlobj.h>
|
||||
#include <psapi.h>
|
||||
|
||||
#define ASSERT assert
|
||||
#define Q_ASSERT assert
|
||||
|
||||
namespace NCTools {
|
||||
|
||||
// Ported from libsync
|
||||
|
||||
registryVariant Utility::registryGetKeyValue(HKEY hRootKey, const std::wstring &subKey, const std::wstring &valueName)
|
||||
{
|
||||
registryVariant value;
|
||||
|
||||
HKEY hKey;
|
||||
|
||||
REGSAM sam = KEY_READ | KEY_WOW64_64KEY;
|
||||
LONG result = RegOpenKeyEx(hRootKey, reinterpret_cast<LPCWSTR>(subKey.data()), 0, sam, &hKey);
|
||||
ASSERT(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
||||
if (result != ERROR_SUCCESS)
|
||||
return value;
|
||||
|
||||
DWORD type = 0, sizeInBytes = 0;
|
||||
result = RegQueryValueEx(hKey, reinterpret_cast<LPCWSTR>(valueName.data()), 0, &type, nullptr, &sizeInBytes);
|
||||
ASSERT(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
||||
if (result == ERROR_SUCCESS) {
|
||||
switch (type) {
|
||||
case REG_DWORD:
|
||||
DWORD dword;
|
||||
Q_ASSERT(sizeInBytes == sizeof(dword));
|
||||
if (RegQueryValueEx(hKey, reinterpret_cast<LPCWSTR>(valueName.data()), 0, &type, reinterpret_cast<LPBYTE>(&dword), &sizeInBytes) == ERROR_SUCCESS) {
|
||||
value = int(dword);
|
||||
}
|
||||
break;
|
||||
case REG_EXPAND_SZ:
|
||||
case REG_SZ: {
|
||||
std::wstring string;
|
||||
string.resize(sizeInBytes / sizeof(wchar_t));
|
||||
result = RegQueryValueEx(hKey, reinterpret_cast<LPCWSTR>(valueName.data()), 0, &type, reinterpret_cast<LPBYTE>(string.data()), &sizeInBytes);
|
||||
|
||||
if (result == ERROR_SUCCESS) {
|
||||
int newCharSize = sizeInBytes / sizeof(wchar_t);
|
||||
// From the doc:
|
||||
// If the data has the REG_SZ, REG_MULTI_SZ or REG_EXPAND_SZ type, the string may not have been stored with
|
||||
// the proper terminating null characters. Therefore, even if the function returns ERROR_SUCCESS,
|
||||
// the application should ensure that the string is properly terminated before using it; otherwise, it may overwrite a buffer.
|
||||
if (string.at(newCharSize - 1) == wchar_t('\0'))
|
||||
string.resize(newCharSize - 1);
|
||||
value = string;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case REG_BINARY: {
|
||||
std::vector<unsigned char> buffer;
|
||||
buffer.resize(sizeInBytes);
|
||||
result = RegQueryValueEx(hKey, reinterpret_cast<LPCWSTR>(valueName.data()), 0, &type, reinterpret_cast<LPBYTE>(buffer.data()), &sizeInBytes);
|
||||
if (result == ERROR_SUCCESS) {
|
||||
value = buffer.at(12);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;// Q_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
ASSERT(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
||||
|
||||
RegCloseKey(hKey);
|
||||
return value;
|
||||
}
|
||||
|
||||
bool Utility::registrySetKeyValue(HKEY hRootKey, const std::wstring &subKey, const std::wstring &valueName, DWORD type, const registryVariant &value)
|
||||
{
|
||||
HKEY hKey;
|
||||
// KEY_WOW64_64KEY is necessary because CLSIDs are "Redirected and reflected only for CLSIDs that do not specify InprocServer32 or InprocHandler32."
|
||||
// https://msdn.microsoft.com/en-us/library/windows/desktop/aa384253%28v=vs.85%29.aspx#redirected__shared__and_reflected_keys_under_wow64
|
||||
// This shouldn't be an issue in our case since we use shell32.dll as InprocServer32, so we could write those registry keys for both 32 and 64bit.
|
||||
// FIXME: Not doing so at the moment means that explorer will show the cloud provider, but 32bit processes' open dialogs (like the ownCloud client itself) won't show it.
|
||||
REGSAM sam = KEY_WRITE | KEY_WOW64_64KEY;
|
||||
LONG result = RegCreateKeyEx(hRootKey, reinterpret_cast<LPCWSTR>(subKey.data()), 0, nullptr, 0, sam, nullptr, &hKey, nullptr);
|
||||
ASSERT(result == ERROR_SUCCESS);
|
||||
if (result != ERROR_SUCCESS)
|
||||
return false;
|
||||
|
||||
result = -1;
|
||||
switch (type) {
|
||||
case REG_DWORD: {
|
||||
try {
|
||||
DWORD dword = std::get<int>(value);
|
||||
result = RegSetValueEx(hKey, reinterpret_cast<LPCWSTR>(valueName.data()), 0, type, reinterpret_cast<const BYTE *>(&dword), sizeof(dword));
|
||||
}
|
||||
catch (const std::bad_variant_access&) {}
|
||||
break;
|
||||
}
|
||||
case REG_EXPAND_SZ:
|
||||
case REG_SZ: {
|
||||
try {
|
||||
std::wstring string = std::get<std::wstring>(value);
|
||||
result = RegSetValueEx(hKey, reinterpret_cast<LPCWSTR>(valueName.data()), 0, type, reinterpret_cast<const BYTE *>(string.data()), static_cast<DWORD>((string.size() + 1) * sizeof(wchar_t)));
|
||||
}
|
||||
catch (const std::bad_variant_access&) {}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;// Q_UNREACHABLE();
|
||||
}
|
||||
ASSERT(result == ERROR_SUCCESS);
|
||||
|
||||
RegCloseKey(hKey);
|
||||
return result == ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
bool Utility::registryDeleteKeyTree(HKEY hRootKey, const std::wstring &subKey)
|
||||
{
|
||||
HKEY hKey;
|
||||
REGSAM sam = DELETE | KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_WOW64_64KEY;
|
||||
LONG result = RegOpenKeyEx(hRootKey, reinterpret_cast<LPCWSTR>(subKey.data()), 0, sam, &hKey);
|
||||
ASSERT(result == ERROR_SUCCESS);
|
||||
if (result != ERROR_SUCCESS)
|
||||
return false;
|
||||
|
||||
result = RegDeleteTree(hKey, nullptr);
|
||||
RegCloseKey(hKey);
|
||||
ASSERT(result == ERROR_SUCCESS);
|
||||
|
||||
result |= RegDeleteKeyEx(hRootKey, reinterpret_cast<LPCWSTR>(subKey.data()), sam, 0);
|
||||
ASSERT(result == ERROR_SUCCESS);
|
||||
|
||||
return result == ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
bool Utility::registryDeleteKeyValue(HKEY hRootKey, const std::wstring &subKey, const std::wstring &valueName)
|
||||
{
|
||||
HKEY hKey;
|
||||
REGSAM sam = KEY_WRITE | KEY_WOW64_64KEY;
|
||||
LONG result = RegOpenKeyEx(hRootKey, reinterpret_cast<LPCWSTR>(subKey.data()), 0, sam, &hKey);
|
||||
ASSERT(result == ERROR_SUCCESS);
|
||||
if (result != ERROR_SUCCESS)
|
||||
return false;
|
||||
|
||||
result = RegDeleteValue(hKey, reinterpret_cast<LPCWSTR>(valueName.data()));
|
||||
ASSERT(result == ERROR_SUCCESS);
|
||||
|
||||
RegCloseKey(hKey);
|
||||
return result == ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
bool Utility::registryWalkSubKeys(HKEY hRootKey, const std::wstring &subKey, const std::function<void(HKEY, const std::wstring&)> &callback)
|
||||
{
|
||||
HKEY hKey;
|
||||
REGSAM sam = KEY_READ | KEY_WOW64_64KEY;
|
||||
LONG result = RegOpenKeyEx(hRootKey, reinterpret_cast<LPCWSTR>(subKey.data()), 0, sam, &hKey);
|
||||
ASSERT(result == ERROR_SUCCESS);
|
||||
if (result != ERROR_SUCCESS)
|
||||
return false;
|
||||
|
||||
DWORD maxSubKeyNameSize;
|
||||
// Get the largest keyname size once instead of relying each call on ERROR_MORE_DATA.
|
||||
result = RegQueryInfoKey(hKey, nullptr, nullptr, nullptr, nullptr, &maxSubKeyNameSize, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
|
||||
ASSERT(result == ERROR_SUCCESS);
|
||||
if (result != ERROR_SUCCESS) {
|
||||
RegCloseKey(hKey);
|
||||
return false;
|
||||
}
|
||||
|
||||
std::wstring subKeyName;
|
||||
subKeyName.reserve(maxSubKeyNameSize + 1);
|
||||
|
||||
DWORD retCode = ERROR_SUCCESS;
|
||||
for (DWORD i = 0; retCode == ERROR_SUCCESS; ++i) {
|
||||
Q_ASSERT(unsigned(subKeyName.capacity()) > maxSubKeyNameSize);
|
||||
// Make the previously reserved capacity official again.
|
||||
subKeyName.resize(subKeyName.capacity());
|
||||
DWORD subKeyNameSize = static_cast<DWORD>(subKeyName.size());
|
||||
retCode = RegEnumKeyEx(hKey, i, reinterpret_cast<LPWSTR>(subKeyName.data()), &subKeyNameSize, nullptr, nullptr, nullptr, nullptr);
|
||||
|
||||
ASSERT(result == ERROR_SUCCESS || retCode == ERROR_NO_MORE_ITEMS);
|
||||
if (retCode == ERROR_SUCCESS) {
|
||||
// subKeyNameSize excludes the trailing \0
|
||||
subKeyName.resize(subKeyNameSize);
|
||||
// Pass only the sub keyname, not the full path.
|
||||
callback(hKey, subKeyName);
|
||||
}
|
||||
}
|
||||
|
||||
RegCloseKey(hKey);
|
||||
return retCode != ERROR_NO_MORE_ITEMS;
|
||||
}
|
||||
|
||||
// Created for Win32
|
||||
|
||||
DWORD Utility::execCmd(std::wstring cmd, bool wait)
|
||||
{
|
||||
// https://docs.microsoft.com/en-us/windows/win32/procthread/creating-processes
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
|
||||
ZeroMemory(&si, sizeof(si));
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory(&pi, sizeof(pi));
|
||||
|
||||
// Start the child process.
|
||||
if (!CreateProcess(nullptr, // No module name (use command line)
|
||||
cmd.data(), // Command line
|
||||
nullptr, // Process handle not inheritable
|
||||
nullptr, // Thread handle not inheritable
|
||||
FALSE, // Set handle inheritance to FALSE
|
||||
0, // No creation flags
|
||||
nullptr, // Use parent's environment block
|
||||
nullptr, // Use parent's starting directory
|
||||
&si, // Pointer to STARTUPINFO structure
|
||||
&pi) // Pointer to PROCESS_INFORMATION structure
|
||||
)
|
||||
{
|
||||
return ERROR_INVALID_FUNCTION;
|
||||
}
|
||||
|
||||
DWORD exitCode = 0;
|
||||
|
||||
if (wait) {
|
||||
// Wait until child process exits.
|
||||
WaitForSingleObject(pi.hProcess, INFINITE);
|
||||
|
||||
GetExitCodeProcess(pi.hProcess, &exitCode);
|
||||
}
|
||||
|
||||
// Close process and thread handles.
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
bool Utility::killProcess(const std::wstring &exePath)
|
||||
{
|
||||
// https://docs.microsoft.com/en-us/windows/win32/psapi/enumerating-all-processes
|
||||
// Get the list of process identifiers.
|
||||
DWORD aProcesses[1024], cbNeeded, cProcesses, i;
|
||||
|
||||
if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Calculate how many process identifiers were returned.
|
||||
cProcesses = cbNeeded / sizeof(DWORD);
|
||||
|
||||
std::wstring tmpMatch = exePath;
|
||||
std::transform(tmpMatch.begin(), tmpMatch.end(), tmpMatch.begin(), std::tolower);
|
||||
|
||||
for (i = 0; i < cProcesses; i++) {
|
||||
if (aProcesses[i] != 0) {
|
||||
// Get a handle to the process.
|
||||
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_TERMINATE, FALSE, aProcesses[i]);
|
||||
|
||||
// Get the process name.
|
||||
if (hProcess) {
|
||||
TCHAR szProcessName[MAX_PATH] = {0};
|
||||
DWORD cbSize = sizeof(szProcessName) / sizeof(TCHAR);
|
||||
|
||||
if (QueryFullProcessImageName(hProcess, 0, szProcessName, &cbSize) == TRUE && cbSize > 0) {
|
||||
std::wstring procName = szProcessName;
|
||||
std::transform(procName.begin(), procName.end(), procName.begin(), std::tolower);
|
||||
|
||||
if (procName == tmpMatch) {
|
||||
if (TerminateProcess(hProcess, 0) == TRUE) {
|
||||
WaitForSingleObject(hProcess, INFINITE);
|
||||
CloseHandle(hProcess);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CloseHandle(hProcess);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Utility::isValidDirectory(const std::wstring &path)
|
||||
{
|
||||
auto attrib = GetFileAttributes(path.data());
|
||||
|
||||
if (attrib == INVALID_FILE_ATTRIBUTES || GetLastError() == ERROR_FILE_NOT_FOUND) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return (attrib & FILE_ATTRIBUTE_DIRECTORY);
|
||||
}
|
||||
|
||||
std::wstring Utility::getAppRegistryString(const std::wstring &appVendor, const std::wstring &appName, const std::wstring &valueName)
|
||||
{
|
||||
std::wstring appKey = std::wstring(LR"(SOFTWARE\)") + appVendor + L'\\' + appName;
|
||||
std::wstring appKeyWow64 = std::wstring(LR"(SOFTWARE\WOW6432Node\)") + appVendor + L'\\' + appName;
|
||||
|
||||
std::vector<std::wstring> appKeys = { appKey, appKeyWow64 };
|
||||
|
||||
for (auto &key : appKeys) {
|
||||
try {
|
||||
return std::get<std::wstring>(Utility::registryGetKeyValue(HKEY_LOCAL_MACHINE,
|
||||
key,
|
||||
valueName));
|
||||
}
|
||||
catch (const std::bad_variant_access&) {}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
std::wstring Utility::getAppPath(const std::wstring &appVendor, const std::wstring &appName)
|
||||
{
|
||||
return getAppRegistryString(appVendor, appName, L""); // intentionally left empty to get the key's "(default)" value
|
||||
}
|
||||
|
||||
std::wstring Utility::getConfigPath(const std::wstring &appName)
|
||||
{
|
||||
// On Windows, use AppDataLocation, that's where the roaming data is and where we should store the config file
|
||||
PWSTR pszPath = nullptr;
|
||||
if (!SUCCEEDED(SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, nullptr, &pszPath)) || !pszPath) {
|
||||
return {};
|
||||
}
|
||||
std::wstring path = pszPath + PathSeparator + appName + PathSeparator;
|
||||
CoTaskMemFree(pszPath);
|
||||
|
||||
auto newLocation = path;
|
||||
|
||||
return newLocation;
|
||||
}
|
||||
|
||||
void Utility::waitForNsisUninstaller(const std::wstring &appShortName)
|
||||
{
|
||||
// Can't WaitForSingleObject because NSIS Uninstall.exe copies itself to a TEMP directory and creates a new process,
|
||||
// so we do sort of a hack and wait for its mutex (see nextcloud.nsi).
|
||||
HANDLE hMutex;
|
||||
DWORD lastError = ERROR_SUCCESS;
|
||||
std::wstring name = appShortName + std::wstring(L"Uninstaller");
|
||||
|
||||
// Give the process enough time to start, to wait for the NSIS mutex.
|
||||
Sleep(1500);
|
||||
|
||||
do {
|
||||
hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, name.data());
|
||||
lastError = GetLastError();
|
||||
if (hMutex) {
|
||||
CloseHandle(hMutex);
|
||||
}
|
||||
|
||||
// This is sort of a hack because WaitForSingleObject immediately returns for the NSIS mutex.
|
||||
Sleep(500);
|
||||
} while (lastError != ERROR_FILE_NOT_FOUND);
|
||||
}
|
||||
|
||||
void Utility::removeNavigationPaneEntries(const std::wstring &appName)
|
||||
{
|
||||
if (appName.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Start by looking at every registered namespace extension for the sidebar, and look for an "ApplicationName" value
|
||||
// that matches ours when we saved.
|
||||
std::vector<std::wstring> entriesToRemove;
|
||||
Utility::registryWalkSubKeys(
|
||||
HKEY_CURRENT_USER,
|
||||
LR"(Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace)",
|
||||
[&entriesToRemove, &appName](HKEY key, const std::wstring &subKey) {
|
||||
try {
|
||||
auto curAppName = std::get<std::wstring>(Utility::registryGetKeyValue(key, subKey, L"ApplicationName"));
|
||||
|
||||
if (curAppName == appName) {
|
||||
entriesToRemove.push_back(subKey);
|
||||
}
|
||||
}
|
||||
catch (const std::bad_variant_access&) {}
|
||||
});
|
||||
|
||||
for (auto &clsid : entriesToRemove) {
|
||||
std::wstring clsidStr = clsid;
|
||||
std::wstring clsidPath = std::wstring(LR"(Software\Classes\CLSID\)") + clsidStr;
|
||||
std::wstring clsidPathWow64 = std::wstring(LR"(Software\Classes\Wow6432Node\CLSID\)") + clsidStr;
|
||||
std::wstring namespacePath = std::wstring(LR"(Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\)") + clsidStr;
|
||||
|
||||
Utility::registryDeleteKeyTree(HKEY_CURRENT_USER, clsidPath);
|
||||
Utility::registryDeleteKeyTree(HKEY_CURRENT_USER, clsidPathWow64);
|
||||
Utility::registryDeleteKeyTree(HKEY_CURRENT_USER, namespacePath);
|
||||
Utility::registryDeleteKeyValue(HKEY_CURRENT_USER, LR"(Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel)", clsidStr);
|
||||
}
|
||||
}
|
||||
|
||||
// Ported from gui, modified to optionally rename matching files
|
||||
bool Utility::copy_dir_recursive(std::wstring from_dir, std::wstring to_dir, copy_dir_recursive_callback *callbackFileNameMatchReplace)
|
||||
{
|
||||
WIN32_FIND_DATA fileData;
|
||||
|
||||
if (from_dir.empty() || to_dir.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (from_dir.back() != PathSeparator.front())
|
||||
from_dir.append(PathSeparator);
|
||||
if (to_dir.back() != PathSeparator.front())
|
||||
to_dir.append(PathSeparator);
|
||||
|
||||
std::wstring startDir = from_dir;
|
||||
startDir.append(L"*.*");
|
||||
|
||||
auto hFind = FindFirstFile(startDir.data(), &fileData);
|
||||
|
||||
if (hFind == INVALID_HANDLE_VALUE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool success = true;
|
||||
|
||||
do {
|
||||
if (fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
|
||||
if (std::wstring(fileData.cFileName) == L"." || std::wstring(fileData.cFileName) == L"..") {
|
||||
continue;
|
||||
}
|
||||
|
||||
std::wstring from = from_dir + fileData.cFileName;
|
||||
std::wstring to = to_dir + fileData.cFileName;
|
||||
|
||||
if (CreateDirectoryEx(from.data(), to.data(), nullptr) == FALSE) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (copy_dir_recursive(from, to, callbackFileNameMatchReplace) == false) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
std::wstring newFilename = fileData.cFileName;
|
||||
|
||||
if (callbackFileNameMatchReplace) {
|
||||
(*callbackFileNameMatchReplace)(std::wstring(fileData.cFileName), newFilename);
|
||||
}
|
||||
|
||||
std::wstring from = from_dir + fileData.cFileName;
|
||||
std::wstring to = to_dir + newFilename;
|
||||
|
||||
if (CopyFile(from.data(), to.data(), TRUE) == FALSE) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (FindNextFile(hFind, &fileData));
|
||||
|
||||
FindClose(hFind);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
} // namespace NCTools
|
||||
@@ -21,6 +21,7 @@
|
||||
#cmakedefine APPLICATION_HELP_URL "@APPLICATION_HELP_URL@"
|
||||
#cmakedefine APPLICATION_ICON_NAME "@APPLICATION_ICON_NAME@"
|
||||
#cmakedefine APPLICATION_SERVER_URL "@APPLICATION_SERVER_URL@"
|
||||
#cmakedefine APPLICATION_SERVER_URL_ENFORCE "@APPLICATION_SERVER_URL_ENFORCE@"
|
||||
#cmakedefine LINUX_APPLICATION_ID "@LINUX_APPLICATION_ID@"
|
||||
#cmakedefine APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "@APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR@"
|
||||
#cmakedefine APPLICATION_WIZARD_HEADER_TITLE_COLOR "@APPLICATION_WIZARD_HEADER_TITLE_COLOR@"
|
||||
|
||||
17
doc/README.md
Normal file
17
doc/README.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# Desktop client documentation
|
||||
|
||||
- The main nextcloud Documentation is found at https://github.com/nextcloud/documentation
|
||||
- The rst files from the current stable branch will be parsed with sphinx to be used at https://docs.nextcloud.com/desktop/3.0/
|
||||
|
||||
## How to build the documentation
|
||||
|
||||
- After installing [sphinx](https://www.sphinx-doc.org) you can run:
|
||||
|
||||
```
|
||||
$ git clone https://github.com/nextcloud/desktop.git
|
||||
$ cd desktop
|
||||
$ cd docs
|
||||
$ sphinx-build -b html -D html_theme='nextcloud_com' -d _build/doctrees . _build/html/com
|
||||
```
|
||||
|
||||
The documentation html files will be at ```desktop/docs/_build/html/com```.
|
||||
@@ -41,16 +41,16 @@ master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Nextcloud Client Manual'
|
||||
copyright = u'2013-2018, The Nextcloud developers'
|
||||
copyright = u'2013-2020, The Nextcloud developers'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '2.4.0'
|
||||
version = '3.0'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '2.4.0'
|
||||
release = '3.0'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
||||
@@ -177,6 +177,21 @@ issue the following command:
|
||||
nextcloud --logdir /tmp/nextcloud_logs --logexpire 48
|
||||
```
|
||||
|
||||
Alternatively, you can add the following to the configuration file:
|
||||
```
|
||||
logDebug=true
|
||||
logExpire=<hours>
|
||||
logDir=<dir>
|
||||
```
|
||||
|
||||
Once you restart the client, you will find the log file in the ``<dir>`` defined in ``logDir``.
|
||||
|
||||
.. note:: You will find the configuration file in the following locations:
|
||||
|
||||
* Microsoft Windows systems: ``%APPDATA%\Nextcloud\nextcloud.cfg``
|
||||
* macOS systems: ``$HOME/Library/Preferences/Nextcloud/nextcloud.cfg``
|
||||
* Linux distributions: ``$HOME/.config/Nextcloud/nextcloud.cfg``
|
||||
|
||||
Nextcloud server Log File
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -1,4 +1,22 @@
|
||||
add_subdirectory(OCContextMenu)
|
||||
add_subdirectory(OCOverlays)
|
||||
add_subdirectory(OCUtil)
|
||||
# Use static runtime for all subdirectories
|
||||
foreach(buildType "" "_DEBUG" "_MINSIZEREL" "_RELEASE" "_RELWITHDEBINFO")
|
||||
string(REPLACE "/MD" "/MT" "CMAKE_CXX_FLAGS${buildType}" "${CMAKE_CXX_FLAGS${buildType}}")
|
||||
endforeach()
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
)
|
||||
configure_file(WinShellExtConstants.h.in ${CMAKE_CURRENT_BINARY_DIR}/WinShellExtConstants.h)
|
||||
|
||||
add_subdirectory(NCContextMenu)
|
||||
add_subdirectory(NCOverlays)
|
||||
add_subdirectory(NCUtil)
|
||||
|
||||
if(BUILD_WIN_MSI)
|
||||
configure_file(WinShellExt.wxs.in ${CMAKE_CURRENT_BINARY_DIR}/WinShellExt.wxs)
|
||||
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/WinShellExt.wxs
|
||||
DESTINATION msi/
|
||||
)
|
||||
endif()
|
||||
|
||||
17
shell_integration/windows/NCContextMenu/CMakeLists.txt
Normal file
17
shell_integration/windows/NCContextMenu/CMakeLists.txt
Normal file
@@ -0,0 +1,17 @@
|
||||
add_library(NCContextMenu MODULE
|
||||
dllmain.cpp
|
||||
NCClientInterface.cpp
|
||||
NCContextMenu.cpp
|
||||
NCContextMenuFactory.cpp
|
||||
NCContextMenuRegHandler.cpp
|
||||
NCContextMenu.rc
|
||||
NCContextMenu.def
|
||||
)
|
||||
|
||||
target_link_libraries(NCContextMenu
|
||||
NCUtil)
|
||||
|
||||
install(TARGETS NCContextMenu
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
)
|
||||
@@ -12,9 +12,7 @@
|
||||
* details.
|
||||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "OCClientInterface.h"
|
||||
#include "NCClientInterface.h"
|
||||
|
||||
#include "CommunicationSocket.h"
|
||||
#include "StringUtil.h"
|
||||
@@ -32,9 +30,8 @@
|
||||
using namespace std;
|
||||
|
||||
#define PIPE_TIMEOUT 5*1000 //ms
|
||||
#define SOCK_BUFFER 4096
|
||||
|
||||
OCClientInterface::ContextMenuInfo OCClientInterface::FetchInfo(const std::wstring &files)
|
||||
NCClientInterface::ContextMenuInfo NCClientInterface::FetchInfo(const std::wstring &files)
|
||||
{
|
||||
auto pipename = CommunicationSocket::DefaultPipePath();
|
||||
|
||||
@@ -80,7 +77,7 @@ OCClientInterface::ContextMenuInfo OCClientInterface::FetchInfo(const std::wstri
|
||||
return info;
|
||||
}
|
||||
|
||||
void OCClientInterface::SendRequest(const wchar_t *verb, const std::wstring &path)
|
||||
void NCClientInterface::SendRequest(const wchar_t *verb, const std::wstring &path)
|
||||
{
|
||||
auto pipename = CommunicationSocket::DefaultPipePath();
|
||||
|
||||
@@ -92,9 +89,5 @@ void OCClientInterface::SendRequest(const wchar_t *verb, const std::wstring &pat
|
||||
return;
|
||||
}
|
||||
|
||||
wchar_t msg[SOCK_BUFFER] = { 0 };
|
||||
if (SUCCEEDED(StringCchPrintf(msg, SOCK_BUFFER, L"%s:%s\n", verb, path.c_str())))
|
||||
{
|
||||
socket.SendMsg(msg);
|
||||
}
|
||||
socket.SendMsg((verb + (L":" + path + L"\n")).data());
|
||||
}
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
class CommunicationSocket;
|
||||
|
||||
class OCClientInterface
|
||||
class NCClientInterface
|
||||
{
|
||||
public:
|
||||
struct ContextMenuInfo {
|
||||
@@ -12,25 +12,24 @@
|
||||
* details.
|
||||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "OCContextMenu.h"
|
||||
#include "OCClientInterface.h"
|
||||
#include "NCContextMenu.h"
|
||||
#include "NCClientInterface.h"
|
||||
|
||||
#include <shobjidl.h>
|
||||
#include <shlwapi.h>
|
||||
#include <shellapi.h>
|
||||
#include <StringUtil.h>
|
||||
#include <strsafe.h>
|
||||
|
||||
extern long g_cDllRef;
|
||||
|
||||
OCContextMenu::OCContextMenu(void)
|
||||
NCContextMenu::NCContextMenu(void)
|
||||
: m_cRef(1)
|
||||
{
|
||||
InterlockedIncrement(&g_cDllRef);
|
||||
}
|
||||
|
||||
OCContextMenu::~OCContextMenu(void)
|
||||
NCContextMenu::~NCContextMenu(void)
|
||||
{
|
||||
InterlockedDecrement(&g_cDllRef);
|
||||
}
|
||||
@@ -38,25 +37,25 @@ OCContextMenu::~OCContextMenu(void)
|
||||
#pragma region IUnknown
|
||||
|
||||
// Query to the interface the component supported.
|
||||
IFACEMETHODIMP OCContextMenu::QueryInterface(REFIID riid, void **ppv)
|
||||
IFACEMETHODIMP NCContextMenu::QueryInterface(REFIID riid, void **ppv)
|
||||
{
|
||||
static const QITAB qit[] =
|
||||
{
|
||||
QITABENT(OCContextMenu, IContextMenu),
|
||||
QITABENT(OCContextMenu, IShellExtInit),
|
||||
QITABENT(NCContextMenu, IContextMenu),
|
||||
QITABENT(NCContextMenu, IShellExtInit),
|
||||
{ 0 },
|
||||
};
|
||||
return QISearch(this, qit, riid, ppv);
|
||||
}
|
||||
|
||||
// Increase the reference count for an interface on an object.
|
||||
IFACEMETHODIMP_(ULONG) OCContextMenu::AddRef()
|
||||
IFACEMETHODIMP_(ULONG) NCContextMenu::AddRef()
|
||||
{
|
||||
return InterlockedIncrement(&m_cRef);
|
||||
}
|
||||
|
||||
// Decrease the reference count for an interface on an object.
|
||||
IFACEMETHODIMP_(ULONG) OCContextMenu::Release()
|
||||
IFACEMETHODIMP_(ULONG) NCContextMenu::Release()
|
||||
{
|
||||
ULONG cRef = InterlockedDecrement(&m_cRef);
|
||||
if (0 == cRef) {
|
||||
@@ -72,7 +71,7 @@ IFACEMETHODIMP_(ULONG) OCContextMenu::Release()
|
||||
#pragma region IShellExtInit
|
||||
|
||||
// Initialize the context menu handler.
|
||||
IFACEMETHODIMP OCContextMenu::Initialize(
|
||||
IFACEMETHODIMP NCContextMenu::Initialize(
|
||||
LPCITEMIDLIST pidlFolder, LPDATAOBJECT pDataObj, HKEY hKeyProgID)
|
||||
{
|
||||
m_selectedFiles.clear();
|
||||
@@ -128,7 +127,7 @@ void InsertSeperator(HMENU hMenu, UINT indexMenu)
|
||||
InsertMenuItem(hMenu, indexMenu, TRUE, &sep);
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
|
||||
IFACEMETHODIMP NCContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
|
||||
{
|
||||
// If uFlags include CMF_DEFAULTONLY then we should not do anything.
|
||||
if (CMF_DEFAULTONLY & uFlags)
|
||||
@@ -136,7 +135,7 @@ IFACEMETHODIMP OCContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(0));
|
||||
}
|
||||
|
||||
m_info = OCClientInterface::FetchInfo(m_selectedFiles);
|
||||
m_info = NCClientInterface::FetchInfo(m_selectedFiles);
|
||||
if (m_info.menuItems.empty()) {
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(0));
|
||||
}
|
||||
@@ -178,7 +177,7 @@ IFACEMETHODIMP OCContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(indexSubMenu));
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO pici)
|
||||
IFACEMETHODIMP NCContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO pici)
|
||||
{
|
||||
std::wstring command;
|
||||
|
||||
@@ -216,11 +215,11 @@ IFACEMETHODIMP OCContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO pici)
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
OCClientInterface::SendRequest(command.data(), m_selectedFiles);
|
||||
NCClientInterface::SendRequest(command.data(), m_selectedFiles);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenu::GetCommandString(UINT_PTR idCommand,
|
||||
IFACEMETHODIMP NCContextMenu::GetCommandString(UINT_PTR idCommand,
|
||||
UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax)
|
||||
{
|
||||
if (idCommand < m_info.menuItems.size() && uFlags == GCS_VERBW) {
|
||||
@@ -12,15 +12,15 @@
|
||||
* details.
|
||||
*/
|
||||
|
||||
#ifndef OCCONTEXTMENU_H
|
||||
#define OCCONTEXTMENU_H
|
||||
#ifndef NCCONTEXTMENU_H
|
||||
#define NCCONTEXTMENU_H
|
||||
|
||||
#pragma once
|
||||
#include <shlobj.h> // For IShellExtInit and IContextMenu
|
||||
#include <string>
|
||||
#include "OCClientInterface.h"
|
||||
#include "NCClientInterface.h"
|
||||
|
||||
class OCContextMenu : public IShellExtInit, public IContextMenu
|
||||
class NCContextMenu : public IShellExtInit, public IContextMenu
|
||||
{
|
||||
public:
|
||||
// IUnknown
|
||||
@@ -36,10 +36,10 @@ public:
|
||||
IFACEMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO pici);
|
||||
IFACEMETHODIMP GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax);
|
||||
|
||||
OCContextMenu();
|
||||
NCContextMenu();
|
||||
|
||||
protected:
|
||||
~OCContextMenu();
|
||||
~NCContextMenu();
|
||||
|
||||
private:
|
||||
// Reference count of component.
|
||||
@@ -47,7 +47,7 @@ private:
|
||||
|
||||
// The name of the selected files (separated by '\x1e')
|
||||
std::wstring m_selectedFiles;
|
||||
OCClientInterface::ContextMenuInfo m_info;
|
||||
NCClientInterface::ContextMenuInfo m_info;
|
||||
};
|
||||
|
||||
#endif //OCCONTEXTMENU_H
|
||||
#endif //NCCONTEXTMENU_H
|
||||
Binary file not shown.
@@ -12,10 +12,8 @@
|
||||
* details.
|
||||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "OCContextMenuFactory.h"
|
||||
#include "OCContextMenu.h"
|
||||
#include "NCContextMenuFactory.h"
|
||||
#include "NCContextMenu.h"
|
||||
#include <new>
|
||||
#include <Shlwapi.h>
|
||||
#pragma comment(lib, "shlwapi.lib")
|
||||
@@ -24,12 +22,12 @@
|
||||
extern long g_cDllRef;
|
||||
|
||||
|
||||
OCContextMenuFactory::OCContextMenuFactory() : m_cRef(1)
|
||||
NCContextMenuFactory::NCContextMenuFactory() : m_cRef(1)
|
||||
{
|
||||
InterlockedIncrement(&g_cDllRef);
|
||||
}
|
||||
|
||||
OCContextMenuFactory::~OCContextMenuFactory()
|
||||
NCContextMenuFactory::~NCContextMenuFactory()
|
||||
{
|
||||
InterlockedDecrement(&g_cDllRef);
|
||||
}
|
||||
@@ -37,18 +35,18 @@ OCContextMenuFactory::~OCContextMenuFactory()
|
||||
|
||||
// IUnknown methods
|
||||
|
||||
IFACEMETHODIMP OCContextMenuFactory::QueryInterface(REFIID riid, void **ppv)
|
||||
IFACEMETHODIMP NCContextMenuFactory::QueryInterface(REFIID riid, void **ppv)
|
||||
{
|
||||
static const QITAB qit[] = { QITABENT(OCContextMenuFactory, IClassFactory), { 0 }, };
|
||||
static const QITAB qit[] = { QITABENT(NCContextMenuFactory, IClassFactory), { 0 }, };
|
||||
return QISearch(this, qit, riid, ppv);
|
||||
}
|
||||
|
||||
IFACEMETHODIMP_(ULONG) OCContextMenuFactory::AddRef()
|
||||
IFACEMETHODIMP_(ULONG) NCContextMenuFactory::AddRef()
|
||||
{
|
||||
return InterlockedIncrement(&m_cRef);
|
||||
}
|
||||
|
||||
IFACEMETHODIMP_(ULONG) OCContextMenuFactory::Release()
|
||||
IFACEMETHODIMP_(ULONG) NCContextMenuFactory::Release()
|
||||
{
|
||||
ULONG cRef = InterlockedDecrement(&m_cRef);
|
||||
if (0 == cRef) {
|
||||
@@ -60,7 +58,7 @@ IFACEMETHODIMP_(ULONG) OCContextMenuFactory::Release()
|
||||
|
||||
// IClassFactory methods
|
||||
|
||||
IFACEMETHODIMP OCContextMenuFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv)
|
||||
IFACEMETHODIMP NCContextMenuFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv)
|
||||
{
|
||||
HRESULT hr = CLASS_E_NOAGGREGATION;
|
||||
|
||||
@@ -69,7 +67,7 @@ IFACEMETHODIMP OCContextMenuFactory::CreateInstance(IUnknown *pUnkOuter, REFIID
|
||||
hr = E_OUTOFMEMORY;
|
||||
|
||||
// Create the COM component.
|
||||
OCContextMenu *pExt = new (std::nothrow) OCContextMenu();
|
||||
NCContextMenu *pExt = new (std::nothrow) NCContextMenu();
|
||||
if (pExt) {
|
||||
// Query the specified interface.
|
||||
hr = pExt->QueryInterface(riid, ppv);
|
||||
@@ -80,7 +78,7 @@ IFACEMETHODIMP OCContextMenuFactory::CreateInstance(IUnknown *pUnkOuter, REFIID
|
||||
return hr;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenuFactory::LockServer(BOOL fLock)
|
||||
IFACEMETHODIMP NCContextMenuFactory::LockServer(BOOL fLock)
|
||||
{
|
||||
if (fLock) {
|
||||
InterlockedIncrement(&g_cDllRef);
|
||||
@@ -13,14 +13,14 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifndef OCCONTEXTMENUFACTORY_H
|
||||
#define OCCONTEXTMENUFACTORY_H
|
||||
#ifndef NCCONTEXTMENUFACTORY_H
|
||||
#define NCCONTEXTMENUFACTORY_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <unknwn.h> // For IClassFactory
|
||||
|
||||
class OCContextMenuFactory : public IClassFactory
|
||||
class NCContextMenuFactory : public IClassFactory
|
||||
{
|
||||
public:
|
||||
// IUnknown
|
||||
@@ -32,11 +32,11 @@ public:
|
||||
IFACEMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv);
|
||||
IFACEMETHODIMP LockServer(BOOL fLock);
|
||||
|
||||
OCContextMenuFactory();
|
||||
NCContextMenuFactory();
|
||||
|
||||
private:
|
||||
~OCContextMenuFactory();
|
||||
~NCContextMenuFactory();
|
||||
long m_cRef;
|
||||
};
|
||||
|
||||
#endif //OCCONTEXTMENUFACTORY_H
|
||||
#endif //NCCONTEXTMENUFACTORY_H
|
||||
@@ -12,9 +12,7 @@
|
||||
* details.
|
||||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "OCContextMenuRegHandler.h"
|
||||
#include "NCContextMenuRegHandler.h"
|
||||
#include "RegDelnode.h"
|
||||
#include <strsafe.h>
|
||||
#include <objbase.h>
|
||||
@@ -70,7 +68,7 @@ HRESULT GetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PWSTR
|
||||
|
||||
}
|
||||
|
||||
HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CLSID& clsid, PCWSTR pszFriendlyName, PCWSTR pszThreadModel)
|
||||
HRESULT NCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CLSID& clsid, PCWSTR pszFriendlyName, PCWSTR pszThreadModel)
|
||||
{
|
||||
if (!pszModule || !pszThreadModel)
|
||||
{
|
||||
@@ -113,7 +111,7 @@ HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CL
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT OCContextMenuRegHandler::UnregisterInprocServer(const CLSID& clsid)
|
||||
HRESULT NCContextMenuRegHandler::UnregisterInprocServer(const CLSID& clsid)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
@@ -133,7 +131,7 @@ HRESULT OCContextMenuRegHandler::UnregisterInprocServer(const CLSID& clsid)
|
||||
}
|
||||
|
||||
|
||||
HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
||||
HRESULT NCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
||||
PCWSTR pszFileType, const CLSID& clsid, PCWSTR pszFriendlyName)
|
||||
{
|
||||
if (!pszFileType)
|
||||
@@ -177,7 +175,7 @@ HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT OCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(
|
||||
HRESULT NCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(
|
||||
PCWSTR pszFileType, PCWSTR pszFriendlyName)
|
||||
{
|
||||
if (!pszFileType)
|
||||
@@ -13,14 +13,14 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifndef OCCONTEXTMENUREGHANDLER_H
|
||||
#define OCCONTEXTMENUREGHANDLER_H
|
||||
#ifndef NCCONTEXTMENUREGHANDLER_H
|
||||
#define NCCONTEXTMENUREGHANDLER_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <windows.h>
|
||||
|
||||
class __declspec(dllexport) OCContextMenuRegHandler
|
||||
class __declspec(dllexport) NCContextMenuRegHandler
|
||||
{
|
||||
public:
|
||||
static HRESULT MakeRegistryEntries(const CLSID& clsid, PCWSTR fileType);
|
||||
@@ -35,4 +35,4 @@ public:
|
||||
static HRESULT UnregisterShellExtContextMenuHandler(PCWSTR pszFileType, PCWSTR pszFriendlyName);
|
||||
};
|
||||
|
||||
#endif //OCCONTEXTMENUREGHANDLER_H
|
||||
#endif //NCCONTEXTMENUREGHANDLER_H
|
||||
124
shell_integration/windows/NCContextMenu/dllmain.cpp
Normal file
124
shell_integration/windows/NCContextMenu/dllmain.cpp
Normal file
@@ -0,0 +1,124 @@
|
||||
/**
|
||||
* Copyright (c) 2015 Daniel Molkentin <danimo@owncloud.com>. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the Free
|
||||
* Software Foundation; either version 2.1 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
||||
* details.
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <Guiddef.h>
|
||||
#include "NCContextMenuRegHandler.h"
|
||||
#include "NCContextMenuFactory.h"
|
||||
#include "WinShellExtConstants.h"
|
||||
|
||||
HINSTANCE g_hInst = nullptr;
|
||||
long g_cDllRef = 0;
|
||||
|
||||
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
|
||||
{
|
||||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
// Hold the instance of this DLL module, we will use it to get the
|
||||
// path of the DLL to register the component.
|
||||
g_hInst = hModule;
|
||||
DisableThreadLibraryCalls(hModule);
|
||||
break;
|
||||
case DLL_THREAD_ATTACH:
|
||||
case DLL_THREAD_DETACH:
|
||||
case DLL_PROCESS_DETACH:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
|
||||
{
|
||||
HRESULT hr;
|
||||
GUID guid;
|
||||
|
||||
hr = CLSIDFromString(CONTEXT_MENU_GUID, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hr)) {
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = CLASS_E_CLASSNOTAVAILABLE;
|
||||
|
||||
if (IsEqualCLSID(guid, rclsid)) {
|
||||
hr = E_OUTOFMEMORY;
|
||||
|
||||
NCContextMenuFactory *pClassFactory = new NCContextMenuFactory();
|
||||
if (pClassFactory) {
|
||||
hr = pClassFactory->QueryInterface(riid, ppv);
|
||||
pClassFactory->Release();
|
||||
}
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
STDAPI DllCanUnloadNow(void)
|
||||
{
|
||||
return g_cDllRef > 0 ? S_FALSE : S_OK;
|
||||
}
|
||||
|
||||
STDAPI DllRegisterServer(void)
|
||||
{
|
||||
HRESULT hr;
|
||||
GUID guid;
|
||||
|
||||
hr = CLSIDFromString(CONTEXT_MENU_GUID, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hr)) {
|
||||
return hr;
|
||||
}
|
||||
|
||||
wchar_t szModule[MAX_PATH];
|
||||
if (GetModuleFileName(g_hInst, szModule, ARRAYSIZE(szModule)) == 0) {
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
return hr;
|
||||
}
|
||||
|
||||
// Register the component.
|
||||
hr = NCContextMenuRegHandler::RegisterInprocServer(szModule, guid,
|
||||
CONTEXT_MENU_DESCRIPTION, L"Apartment");
|
||||
if (SUCCEEDED(hr)) {
|
||||
// Register the context menu handler. The context menu handler is
|
||||
// associated with the .cpp file class.
|
||||
hr = NCContextMenuRegHandler::RegisterShellExtContextMenuHandler(L"AllFileSystemObjects", guid, CONTEXT_MENU_REGKEY_NAME);
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
STDAPI DllUnregisterServer(void)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
GUID guid;
|
||||
|
||||
hr = CLSIDFromString(CONTEXT_MENU_GUID, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hr)) {
|
||||
return hr;
|
||||
}
|
||||
|
||||
wchar_t szModule[MAX_PATH];
|
||||
if (GetModuleFileName(g_hInst, szModule, ARRAYSIZE(szModule)) == 0) {
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
return hr;
|
||||
}
|
||||
|
||||
// Unregister the component.
|
||||
hr = NCContextMenuRegHandler::UnregisterInprocServer(guid);
|
||||
if (SUCCEEDED(hr)) {
|
||||
// Unregister the context menu handler.
|
||||
hr = NCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(L"AllFileSystemObjects", CONTEXT_MENU_REGKEY_NAME);
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user