リンク先からexeファイルを静的にダウンロードするようにしたい
請負元から
・下記リンク先からexeファイル「oooo.exe」をバックグラウンドでダウンロードするように設定
http://xxxx.jp/download.php?file=oooo.exe&type=kso
・exeファイルダウンロード完了後、exeを起動するように設定
してくれといわれました
oooo.exeを静的にダウンロードさせるにはどうすればいいでしょうか。
あくまでバックグラウンドでダウンロードさせたいのです。
ShellExecuteを使用するとブラウザが起動して保存するかどうか聞かれてしまいます。
HttpOpenRequest関数も以下のように使用してみましたがうまくいきませんでした。
HINTERNET hRequest = HttpOpenRequest(hConnection,
"GET",
"oooo.exe",
NULL,
"http://xxxx.jp/download.php?file=oooo.exe&type=kso",
NULL,
0,
NULL);
環境はVC++6.0です。
どうかお知恵をかしてください。
リンク先からexeファイルを静的にダウンロードするようにしたい
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: リンク先からexeファイルを静的にダウンロードするようにしたい
すくなくともバックグラウンドでダウンロードするにはスレッドで行う必要があると思います。
試していませんがMFCであればスレッドでCInternetSessionでOpenURLしてCHttpFileでダウンロードかなと・・・。VC++6.0は持っていないので確認できませんが。
「WILL - HTTPでのファイルのダウンロード」
http://www31.ocn.ne.jp/~yoshio2/vcmemo19-1.html
試していませんがMFCであればスレッドでCInternetSessionでOpenURLしてCHttpFileでダウンロードかなと・・・。VC++6.0は持っていないので確認できませんが。
「WILL - HTTPでのファイルのダウンロード」
http://www31.ocn.ne.jp/~yoshio2/vcmemo19-1.html
これは起動のことだと思いますが、ShellExecuteすれば良いと思います。・exeファイルダウンロード完了後、exeを起動するように設定
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: リンク先からexeファイルを静的にダウンロードするようにしたい
スレッド使わずとも、ダウンロードして起動する(だけの)プログラムを作って、そいつを起動してやれば良いのではないでしょうか。
Re: リンク先からexeファイルを静的にダウンロードするようにしたい
作らなくても、wgetとかを使えばよいのでは?ISLe さんが書きました:ダウンロードして起動する(だけの)プログラムを作って
Re: リンク先からexeファイルを静的にダウンロードするようにしたい
大まかに
(1)WinInet.libをつかってファイルをダウンロード
(2)ダウンロードしたファイルをShellExecute()やsystem(),CreateProcess()などで実行
という流れになるかと思います。
WinInet.libを使うのが一番手っ取り早い気がするのですが
もう作られていたらすみません。
"静的に"という意味が自分はわかりませんが、"メインスレッドを邪魔しない"という意味でしたら
下記のFileDownload関数をメインスレッドと別のスレッドで実行してもらえれば
いけるかなと思います。
ただ、phpになっているのでURLの構文解析が必要になるとは思います・・・・
PHPに詳しくないのでお答えできなくてすみません。
あともう1点気になったのは
なにか仕事で使ったりする重要なプログラムでしたら、そのまま使うのは絶対にやめてください。
下記のコードはエラー処理していなかったり、使ってはいけない関数が使われていたりするからです。
一切の責任は取れませんのでよろしくお願いいたします・・・・・
ここまで書いてしまって、ふと思ったのですが、もしかして、
「ダウンロードファイルをすぐに実行するようにブラウザの設定をしてくれ」
という依頼でしょうか?
(でも、だとしたら開発環境とか書かないか・・・)
長々すみませんでした。
(1)WinInet.libをつかってファイルをダウンロード
(2)ダウンロードしたファイルをShellExecute()やsystem(),CreateProcess()などで実行
という流れになるかと思います。
WinInet.libを使うのが一番手っ取り早い気がするのですが
もう作られていたらすみません。
"静的に"という意味が自分はわかりませんが、"メインスレッドを邪魔しない"という意味でしたら
下記のFileDownload関数をメインスレッドと別のスレッドで実行してもらえれば
いけるかなと思います。
ただ、phpになっているのでURLの構文解析が必要になるとは思います・・・・
PHPに詳しくないのでお答えできなくてすみません。
あともう1点気になったのは
と書かれている点です。hirokun さんが書きました:リンク先からexeファイルを静的にダウンロードするようにしたい
請負元から
・下記リンク先からexeファイル「oooo.exe」をバックグラウンドでダウンロードするように設定
http://xxxx.jp/download.php?file=oooo.exe&type=kso
・exeファイルダウンロード完了後、exeを起動するように設定
してくれといわれました
なにか仕事で使ったりする重要なプログラムでしたら、そのまま使うのは絶対にやめてください。
下記のコードはエラー処理していなかったり、使ってはいけない関数が使われていたりするからです。
一切の責任は取れませんのでよろしくお願いいたします・・・・・
ここまで書いてしまって、ふと思ったのですが、もしかして、
「ダウンロードファイルをすぐに実行するようにブラウザの設定をしてくれ」
という依頼でしょうか?
(でも、だとしたら開発環境とか書かないか・・・)
長々すみませんでした。
//別の目的で作ったコードの流用なので汚くてすみません。
#include <windows.h>
#include <stdio.h>
#include <wininet.h>
#include <tchar.h>
#include <conio.h>
#pragma comment(lib, "WinInet.lib")
#define BUF_SIZE 100000
int FileDownload(char *out,char *szUrl){
HINTERNET hInet,hUrl;
char *buf,*data;
DWORD dwRead,dwTotal=0;
HGLOBAL hMem;
int size=0,Oldsize=0,Count=0,PlusSizel;
FILE* fp2;
BOOL Flag=FALSE;
buf=(char*)malloc(sizeof(char)*BUF_SIZE);
hInet=InternetOpen("hoge",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
hUrl=InternetOpenUrl(hInet,szUrl,NULL,0,0,0);
fp2 = fopen(out , "ab" );
while(1){
InternetReadFile(hUrl,buf,BUF_SIZE,&dwRead);
if(dwRead<=0)break;
fwrite( buf, 1,dwRead, fp2 );
fflush(fp2);
}
fclose( fp2 );
free(buf);
InternetCloseHandle(hUrl);
InternetCloseHandle(hInet);
return size;
}
int main(int argc,char* argv[]){
int i;
char filename[1024],url[1024];
printf("ファイルに付ける名前->"); //hozon.exeなど・・・・
gets(filename);
printf("ファイルのURL->"); //http://www.hoge.com/fuga/piyo.exeなど・・・・・
gets(url);
FileDownload(filename,url);
strcat(filename,"\r\n");
system(filename);
return 0;
}
Re: リンク先からexeファイルを静的にダウンロードするようにしたい
最初に投稿された方のリンク先を参考にしてCHttpFileを使用して解決しました。
ソースまで書いて下さった方、ありがとうございます。
このサイトは、はじめて利用しましたが親切な方ばかりでビックリしました!
どうもありがとう!!
ソースまで書いて下さった方、ありがとうございます。
このサイトは、はじめて利用しましたが親切な方ばかりでビックリしました!
どうもありがとう!!