#javascript #c# #batch-file
#javascript #c# #пакетный файл
Вопрос:
Говорит, что URL неверен, но мне кажется правильным. Я пытаюсь загрузить файл из Интернета, запустить программу, а затем после завершения процесса удалить программу. Любая помощь была бы отличной
процесс будет
запустите exe —> для создания простого загрузчика —> добавьте параметры через bat-файл —> запустите файл ——> дождитесь завершения процесса ——> удалите загруженные файлы. Мне еще предстоит добавить процесс ожидания и команды удаления
@if (@X)==(@Y) @end /****** jscript comment ******
@echo off
::::::::::::::::::::::::::::::::::::
::: compile the script ::::
::::::::::::::::::::::::::::::::::::
setlocal
if exist simpledownloader.exe goto :skip_compilation
set "frm=%SystemRoot%Microsoft.NETFramework"
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%Microsoft.NETFrameworkv*"') do (
if exist "%%vjsc.exe" (
rem :: the javascript.net compiler
set "jsc=%%~dpsnfxvjsc.exe"
goto :break_loop
)
)
echo jsc.exe not found amp;amp; exit /b 0
:break_loop
call %jsc% /nologo /out:"simpledownloader.exe" "%~dpsfnx0"
::::::::::::::::::::::::::::::::::::
::: end of compilation ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation
:: download the file
::
::::::::::
:: simpledownloader.exe "%%~1" "%%~2"
simpledownloader.exe "https://download.splashtop.com/sos/SplashtopSOS.exe" sos.exe
sos.exe
:: del /q simpledownloader.exe
::
::::::::
::
exit /b 0
****** end of jscript comment ******/
import System;
var arguments:String[] = Environment.GetCommandLineArgs();
var webClient:System.Net.WebClient = new System.Net.WebClient();
print("Downloading " arguments[1] " to " arguments[2]);
try {
webClient.DownloadFile(arguments[1], arguments[2]);
} catch (e) {
Console.BackgroundColor = ConsoleColor.Green;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("nnProblem with downloading " arguments[1] " to " arguments[2] "Check if the internet address is valid");
Console.ResetColor();
Environment.Exit(5);
}
Комментарии:
1. Вы все равно должны использовать
:: simpledownloader.exe "%~1" "%~2"
, а не:: simpledownloader.exe "%%~1" "%%~2
. Я также не хотел бы загружать что-либо черезhttp://
, в отличие отhttps://
.2. Самое главное, я не уверен, знаете ли вы, но вы, похоже, пытаетесь использовать пакетный файл как гибридный cmd / js-файл, но, похоже, не отделили один от другого таким образом, чтобы каждый из них рассматривался как правильный синтаксис для их соответствующих интерпретаторов / движков. Вы использовали,
****** end of jscript comment ******/
, но не включили ничего, что определяет начало комментария jscript, например@set @x=0 /*
, или@if (true == false) @end /*
, например.3. Как вы думаете, это может быть проблема с tls? Я довольно зеленый, как мне принудительно использовать tls 1.2
4. Я думаю, что основной проблемой было то, что я вам сказал! Вы скопировали фрагмент кода из гибридного файла cmd / js и опустили некоторые из них. Теперь, когда вы добавили этот код, у вас может возникнуть другая проблема, но поскольку вы не предоставили никакой отладочной информации, я не собираюсь просто давать вам еще одну вещь для исправления, затем еще одну и так далее, пока вы не скажете мне, что все работает так, как вы хотели. Это технический сайт, вы должны понимать, что ваша роль в этом вопросе заключается в том, чтобы предоставить нам все, что нам нужно, чтобы мы могли воспроизвести вашу проблему, «Говорит, что URL неверен» — это просто недостаточный способ сделать это.
5. @Compo Это была просто плохая копия и вставка, извините за это … я исправил это выше.
Ответ №1:
Я думаю, что нашел кое-что для вас, я внес некоторые коррективы для вас. Счастливого написания сценариев!
@echo off
IF EXIST sos.exe goto delete
IF NOT EXIST sos.exe goto skip
:delete
echo delete
del /f sos.exe
timeout 5
:skip
echo skip
rem :: the first argument is the script name as it will be used for proper help message
cscript //E:JScript //nologo "%~f0" "%~nx0" %*
start sos.exe
exit /b %errorlevel%
@if (@X)==(@Y) @end JScript comment */
// global variables and constants
var ARGS = WScript.Arguments;
var scriptName=ARGS.Item(0);
var url="";
var saveTo="";
var user=0;
var pass=0;
var proxy=0;
var bypass="";
var proxy_user=0;
var proxy_pass=0;
var certificate=0;
var force=true;
//ActiveX objects
//Use the right version of MSXML
/*var progIDs = [ 'Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.5.0', 'Msxml2.DOMDocument.4.0', 'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' ]
for (var i = 0; i < progIDs.length; i ) {
try {
var XMLHTTPObj = new ActiveXObject(progIDs[i]);
}catch (ex) {
}
}
if typeof XMLHTTPObj === 'undefined'{
WScript.Echo ("You are using too ancient windows or you have no installed IE");
WScript.Quit(1);
}*/
var XMLHTTPObj = new ActiveXObject("MSXML2.XMLHTTP");
var FileSystemObj = new ActiveXObject("Scripting.FileSystemObject");
var AdoDBObj = new ActiveXObject("ADODB.Stream");
function existsItem(path){
return FileSystemObj.FolderExists(path)||FileSystemObj.FileExists(path);
}
stripTrailingSlash = function(path){
while (path.substr(path.length - 1,path.length) == '\') {
path=path.substr(0, path.length - 1);
}
return path;
}
function deleteItem(path){
if (FileSystemObj.FileExists(path)){
FileSystemObj.DeleteFile(path);
return true;
} else if (FileSystemObj.FolderExists(path) ) {
FileSystemObj.DeleteFolder(stripTrailingSlash(path));
return true;
} else {
return false;
}
}
function writeFile(fileName,data ){
AdoDBObj.Type = 1;
AdoDBObj.Open();
AdoDBObj.Position=0;
AdoDBObj.Write(data);
AdoDBObj.SaveToFile(fileName,2);
AdoDBObj.Close();
}
function download( url,file){
if (force amp;amp; existsItem(file)){
if(!deleteItem(file)){
WScript.Echo("Unable to delete " file);
WScript.Quit(8);
}
}else if (existsItem(file)){
WScript.Echo("Item " file " already exist");
WScript.Quit(9);
}
if (proxy!=0 amp;amp; bypass !="") {
//https://msdn.microsoft.com/en-us/library/ms760236(v=vs.85).aspx
XMLHTTPObj.setProxy(SXH_PROXY_SET_DIRECT,proxy,bypass);
} else if (proxy!=0) {
XMLHTTPObj.setProxy(SXH_PROXY_SET_DIRECT,proxy,"");
}
if (proxy_user!=0 amp;amp; proxy_pass!=0 ) {
//https://msdn.microsoft.com/en-us/library/ms763680(v=vs.85).aspx
XMLHTTPObj.setProxyCredentials(proxy_user,proxy_pass);
}
if(certificate!=0) {
//https://msdn.microsoft.com/en-us/library/ms763811(v=vs.85).aspx
WinHTTPObj.setOption(3,certificate);
}
if (user!=0 amp;amp; pass!=0){
//https://msdn.microsoft.com/en-us/library/ms757849(v=vs.85).aspx
XMLHTTPObj.Open('GET',url,false,user,pass);
} else {
XMLHTTPObj.Open('GET',url,false);
}
XMLHTTPObj.Send();
var status=XMLHTTPObj.Status;
switch(status){
case 200:
WScript.Echo("Status: 200 OK");
break;
case 401:
WScript.Echo("Status: 401 Unauthorized");
WScript.Echo("Check if correct user and password were provided");
WScript.Quit(401);
break;
case 407:
WScript.Echo("Status:407 Proxy Authentication Required");
WScript.Echo("Check if correct proxy user and password were provided");
WScript.Quit(407);
break;
default:
WScript.Echo("Status: " status);
WScript.Echo("Try to help yourself -> https://en.wikipedia.org/wiki/List_of_HTTP_status_codes");
WScript.Quit(status);
}
writeFile(file,XMLHTTPObj.ResponseBody);
}
function main(){
url="https://download.splashtop.com/sos/SplashtopSOS.exe"
saveTo="sos.exe";
download(url,saveTo);
}
Комментарии:
1. Я бы запустил его, хотя iexpress делает его exe-файлом для упрощения распространения, просто не забудьте внести его в белый список, некоторые антивирусные программы отметят это.