| 1. |
Solve : luanch of executable from within .bat file fails? |
|
Answer» I am trying to get started with Google's Android Studio. I have installed the studio software and the Android SDK on my d:\ drive, as follows... I get the following error message... The message shows a relative path is being used. foxidrive: Yes, a relative path. That particular error message is displayed when SDK Manager.exe runs. That .exe is in the sdk folder, android .bat is in the sdk\tools folder, so the .bat file is in the tools folder relative to the exe. But it makes no difference how I initiate the process, SOMETHING is preventing the android tools from traversing the Windows path. Again, these files do all work on some systems. I'm pretty sure it is not a coding error in the various .exe/.bat files. My current best guess is there is a permission conflict. I just don't know what permissions, where to find them, and how to fix the problem. I've looked at the security settings in various Windows peroperty dialogs for the files and folders, nothing works. Except it does work, on other people's Windows machines. Just not on mine.Do you get a UAC prompt when running the installer? What are the user account control settings for the computers that it works on and your computer?From the Android Developer Website. Quote On some Windows systems, the launcher script does not find where Java is installed. If you encounter this problem, you need to set an environment variable indicating the correct location.squashman: JAVA_HOME has been set on my system for a long time prior to trying to use Android, and it remains pointed at a valid JDK. Jerrysquashman: If I run the installer as administrator, I get the prompt. If not, no prompt. Either way, makes no difference, files still don't run correctly. User account control properties are the same on both computers (mine, Windows 7 Ultimate, where the SDK files don't work, and my wife's, Windows 7 Home Pro, where the SDK files do work)... Default - Notify me only when programs try to make changes to my computer. Something I had not noticed before, but in the SDK installer .exe's properties dialog, there is this message at the bottom... Security - This file came from another comptuer and might be clocked to help protect the computer. When I click the [ Unblock ] button, the text goes grey (and is not shown on subsequent openings of the properties dialog), but it makes no difference, the EXECUTABLES still do not work correctly. Quote from: Jerry Ford on November 24, 2014, 05:59:11 PM The batch files, BTW, appear to be correct, with no broken syntax. Your question is sorta like saying: "I wrote some source code and it doesn't work - can you tell me what's wrong with it?" and you don't show anyone the source code. Code: [Select]for /f "delims=" %%a in ('"%~dps0\find_java.exe" -s') do set java_exe=%%a On a casual examination, the code above will only work if the find_java.exe is in the same folder as the batch file. Quote from: Squashman on November 21, 2014, 10:10:16 PM Would probably help to see the contents of each batch file. This says it all...Okay, here are the two files where it starts. There are more, but I can't copy the whole SDK. It is a free download though, if you really want to purse all files INVOLVED. Get it here (you'll need to create an account, but,again, free)... https://developer.android.com/sdk/index.html?hl=i The SDK comes in an executable installer. When I run it (with or without administrative privileges, doesn't seem to matter, and it worked fine without on the Win7 Home machine where the SDK works), the last panel in the installer asks if I want to start the SDK Manager, which is to say run the file SDK Manager.exe that is located in the SDK top level folder. When I do, I get the error message Failed to execute tools\android.bat:, error 2 The system cannot find the file specified. When I open a command window and cd to the SDK tools folder, I run android.bat from the command line and get the error message '"D:\dev\android\sdk\tools\lib\\find_java.exe" -s' is not recognized as an internal or external command, operable program or batch file. The executable find_java.exe, which the message references, is actually called from within find_java.bat, both of which are in the tools\lib folder. Here's android.bat (in the SDK's tools folder), followed by find_java.bat... echo off rem Copyright (C) 2007 The Android Open Source Project rem rem Licensed under the Apache License, Version 2.0 (the "License"); rem you may not use this file except in compliance with the License. rem You may obtain a copy of the License at rem rem http://www.apache.org/licenses/LICENSE-2.0 rem rem Unless required by applicable law or agreed to in writing, software rem distributed under the License is distributed on an "AS IS" BASIS, rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. rem See the License for the specific language governing permissions and rem limitations under the License. rem Useful links: rem Command-line reference: rem http://technet.microsoft.com/en-us/library/bb490890.aspx rem don't modify the caller's environment setlocal rem Set up prog to be the path of this script, including following symlinks, rem and set up progdir to be the fully-qualified pathname of its directory. set prog=%~f0 rem Grab current directory before we change it set work_dir=%cd% rem Change current directory and drive to where the script is, to avoid rem issues with directories containing whitespaces. cd /d %~dp0 rem Check we have a valid Java.exe in the path. set java_exe= call lib\find_java.bat if not defined java_exe goto :EOF set jar_path=lib\sdkmanager.jar;lib\swtmenubar.jar rem Set SWT.Jar path based on current architecture (x86 or x86_64) for /f "delims=" %%a in ('"%java_exe%" -jar lib\archquery.jar') do set swt_path=lib\%%a :MkTempCopy rem Copy android.bat and its required libs to a temp dir. rem This avoids locking the tool dir in case the user is trying to update it. set tmp_dir=%TEMP%\temp-android-tool xcopy %swt_path% %tmp_dir%\%swt_path% /I /E /C /G /R /Y /Q > nul copy /B /D /Y lib\common.jar %tmp_dir%\lib\ > nul copy /B /D /Y lib\commons-codec* %tmp_dir%\lib\ > nul copy /B /D /Y lib\commons-compress* %tmp_dir%\lib\ > nul copy /B /D /Y lib\commons-logging* %tmp_dir%\lib\ > nul copy /B /D /Y lib\dvlib.jar %tmp_dir%\lib\ > nul copy /B /D /Y lib\guava* %tmp_dir%\lib\ > nul copy /B /D /Y lib\httpclient* %tmp_dir%\lib\ > nul copy /B /D /Y lib\httpcore* %tmp_dir%\lib\ > nul copy /B /D /Y lib\httpmime* %tmp_dir%\lib\ > nul copy /B /D /Y lib\layoutlib-api.jar %tmp_dir%\lib\ > nul copy /B /D /Y lib\org-eclipse-* %tmp_dir%\lib\ > nul copy /B /D /Y lib\sdk* %tmp_dir%\lib\ > nul copy /B /D /Y lib\swtmenubar.jar %tmp_dir%\lib\ > nul rem jar_path and swt_path are relative to PWD so we don't need to adjust them, just change dirs. set tools_dir=%cd% cd /d %tmp_dir% :EndTempCopy rem The global ANDROID_SWT always OVERRIDE the SWT.Jar path if defined ANDROID_SWT set swt_path=%ANDROID_SWT% if exist "%swt_path%" goto SetPath echo ERROR: SWT folder '%swt_path%' does not exist. echo Please set ANDROID_SWT to point to the folder containing swt.jar for your platform. goto :EOF :SetPath rem Finally exec the java program and end here. REM set REMOTE_DEBUG=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 call "%java_exe% %REMOTE_DEBUG%" "-Dcom.android.sdkmanager.toolsdir=%tools_dir%" "-Dcom.android.sdkmanager.workdir=%work_dir%" -classpath "%jar_path%;%swt_path%\swt.jar" com.android.sdkmanager.Main %* rem EOF Here's find_java.bat... echo off rem Copyright (C) 2007 The Android Open Source Project rem rem Licensed under the Apache License, Version 2.0 (the "License"); rem you may not use this file except in compliance with the License. rem You may obtain a copy of the License at rem rem http://www.apache.org/licenses/LICENSE-2.0 rem rem Unless required by applicable law or agreed to in writing, software rem distributed under the License is distributed on an "AS IS" BASIS, rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. rem See the License for the specific language governing permissions and rem limitations under the License. rem This script is called by the other batch files to find a suitable Java.exe rem to use. The script changes the "java_exe" env variable. The variable rem is left unset if Java.exe was not found. rem Useful links: rem Command-line reference: rem http://technet.microsoft.com/en-us/library/bb490890.aspx rem Check we have a valid Java.exe in the path. The return code will rem be 0 if the command worked or 1 if the exec failed (program not found). for /f "delims=" %%a in ('"%~dps0\find_java.exe" -s') do set java_exe=%%a if not defined java_exe goto :CheckFailed :SearchJavaW rem Check if we can find a javaw.exe at the same location than java.exe. rem If that doesn't work, just fall back on the java.exe we just found. for /f "delims=" %%a in ('"%~dps0\find_java.exe" -s -w') do set javaw_exe=%%a if not exist "%javaw_exe%" set javaw_exe=%java_exe% goto :EOF :CheckFailed echo. echo ERROR: No suitable Java found. In order to properly use the Android Developer echo Tools, you need a suitable version of Java JDK installed on your system. echo We recommend that you install the JDK version of JavaSE, available here: echo http://www.oracle.com/technetwork/java/javase/downloads echo. echo If you already have Java installed, you can define the JAVA_HOME environment echo variable in Control Panel / System / Avanced System Settings to point to the echo JDK folder. echo. echo You can find the complete Android SDK requirements here: echo http://developer.android.com/sdk/requirements.html echo. goto :EOF Try changing this line: for /f "delims=" %%a in ('"%~dps0\find_java.exe" -s') do set java_exe=%%a to this: for /f "delims=" %%a in ('"%~dps0find_java.exe" -s') do set java_exe=%%a Also check that path to make sure that find_java.exe actually exists.Lemonilla: The change you suggest replaces the double backslash with a single backslash in the path to find_java.exe, so D:\dev\android\sdk\tools\lib\\find_java.exe becomes D:\dev\android\sdk\tools\lib\find_java.exe but either one works as a valid Windows path. And yes, find_java.exe does exist at that location, and when I run it from the command line it returns a valid path... D:\dev\android\sdk\tools>lib\find_java.exe C:\ProgramData\Oracle\Java\javapath\java.exe D:\dev\android\sdk\tools> ...which does point to the java executable in my JDK... D:\dev\android\sdk\tools>C:\ProgramData\Oracle\Java\javapath\java.exe -version java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b18) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) But attempts to run the Android SDK Manager or andriod.bat still fail. |
|