リンク先からexeファイルを静的にダウンロードするようにしたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hirokun

リンク先からexeファイルを静的にダウンロードするようにしたい

#1

投稿記事 by hirokun » 12年前

リンク先から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です。
どうかお知恵をかしてください。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: リンク先からexeファイルを静的にダウンロードするようにしたい

#2

投稿記事 by softya(ソフト屋) » 12年前

すくなくともバックグラウンドでダウンロードするにはスレッドで行う必要があると思います。
試していませんがMFCであればスレッドでCInternetSessionでOpenURLしてCHttpFileでダウンロードかなと・・・。VC++6.0は持っていないので確認できませんが。
「WILL - HTTPでのファイルのダウンロード」
http://www31.ocn.ne.jp/~yoshio2/vcmemo19-1.html
・exeファイルダウンロード完了後、exeを起動するように設定
これは起動のことだと思いますが、ShellExecuteすれば良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: リンク先からexeファイルを静的にダウンロードするようにしたい

#3

投稿記事 by ISLe » 12年前

スレッド使わずとも、ダウンロードして起動する(だけの)プログラムを作って、そいつを起動してやれば良いのではないでしょうか。

たかぎ
記事: 328
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: リンク先からexeファイルを静的にダウンロードするようにしたい

#4

投稿記事 by たかぎ » 12年前

ISLe さんが書きました:ダウンロードして起動する(だけの)プログラムを作って
作らなくても、wgetとかを使えばよいのでは?

アバター
shiro4ao
記事: 224
登録日時: 13年前
住所: 広島

Re: リンク先からexeファイルを静的にダウンロードするようにしたい

#5

投稿記事 by shiro4ao » 12年前

大まかに
(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;

}

hirokun

Re: リンク先からexeファイルを静的にダウンロードするようにしたい

#6

投稿記事 by hirokun » 12年前

最初に投稿された方のリンク先を参考にしてCHttpFileを使用して解決しました。
ソースまで書いて下さった方、ありがとうございます。
このサイトは、はじめて利用しましたが親切な方ばかりでビックリしました!
どうもありがとう!!

閉鎖

“C言語何でも質問掲示板” へ戻る