使用の停止(?)
投稿者 shu  (社会人)
投稿日時
2013/11/17 08:20:23
前作というのが既に出来上がっているものでそのような仕組みが
ない場合、動かなく出来る可能性があるとしたらサーバーへのアクセスを
行っていることです。サーバー側の受け付ける入力または返還する戻りデータの
形式を変更してしまえばエラーとなり前作は動作しなくなります。
前作というのがこれから作るものであったとしてもクライアントだけで閉じている
ものであったらこの仕組みは難しいです。少なくとも起動時にサーバーへのアクセスを
してバージョンチェックを行う必要があります。
ない場合、動かなく出来る可能性があるとしたらサーバーへのアクセスを
行っていることです。サーバー側の受け付ける入力または返還する戻りデータの
形式を変更してしまえばエラーとなり前作は動作しなくなります。
前作というのがこれから作るものであったとしてもクライアントだけで閉じている
ものであったらこの仕組みは難しいです。少なくとも起動時にサーバーへのアクセスを
してバージョンチェックを行う必要があります。
投稿者 大初心者  (中学生)
投稿日時
2013/11/17 16:59:04
それを行うにはどういった準備をすればいいですか?
投稿者 nin  (社会人)
投稿日時
2013/11/18 12:56:47
なかなかあきらめない回答いいですね・・・。
で、素人ジジイながら、考えてみました
大初心者様もインターネットをされているので、プロパイダ契約されて
いると思います。通常、メールと、ホームページのエリアが付属で付いて
いると思います
ホームページのエリアに更新情報を置いて、プログラム起動時に、チェック
するようにします
通信手段としては、ホームページのアクセスで使う、HTTPプロトコロルか
データのアップダウンで使う、FTPプロトコロルかのどちらかを利用する
ことになります。(HTTPのほうが、ブロックされにくいので、問題は少ない
と思います)
一応FTPでの手順では、以下のような感じです
更新情報を一旦ファイルとしてダウンロードしてから開いています
多分、一旦ファイルにしなくてもいいように思いますが、その編は、詳しく
ありません。
ftpで通信できる環境があるのでしたら、まず、フリーのftpツールを使って
通信できるか確認してください
バージョン情報を記載したファイル
version.txt を準備します
中身は、数字のみ (数字の1~)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim FTPEr as Integer
FTPEr = Ftpdl("version.txt","version.txt")
IF FTPEr = 0 Then
'ダウンロードファイルを読み込みます
If System.IO.File.Exists(Application.StartupPath + "\version.txt") Then
Dim Reader As New IO.StreamReader(Application.StartupPath + "\version.txt")
Dim version as Integer = Reader.ReadLine
Reader.Close()
If version >現在のバージョン Then
MsgBox("最新バージョンが存在します")
起動させない情報を入れる
End if
Else
MsgBox("ファイルが存在しません")
End If
Else
Msgbox("ダウンロードエラーです")
End If
End Sub
Private Function Ftpdl(ByVal FileNam As String, ByVal LFileNam As String) as Integer
Dim UserName As String = "ログインユーザ名"
Dim UserPass As String = "ログインパスワード"
Dim ServerName As String = "ftp://xxxxx あなたのホームページのアドレス" & FileNam
Dim u As Uri
u = New Uri(ServerName)
'ダウンロードしたファイルの保存先
Dim downFile As String = Application.StartupPath + "\" + LFileNam
'FtpWebRequestの作成
Dim ftpReq As System.Net.FtpWebRequest = _
CType(System.Net.WebRequest.Create(u), System.Net.FtpWebRequest)
'ftpReq.ReadWriteTimeout = Val(Form1.TextBox18.Text)
'ftpReq.Timeout = Val(Form1.TextBox19.Text)
'ログインユーザー名とパスワードを設定
ftpReq.Credentials = New System.Net.NetworkCredential(UserName, UserPass)
'MethodにWebRequestMethods.Ftp.DownloadFile("RETR")を設定
ftpReq.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
'要求の完了後に接続を閉じる
ftpReq.KeepAlive = True
'ASCIIモードで転送する
ftpReq.UseBinary = False
'PASSIVEモードを無効にする
ftpReq.UsePassive = True
On Error GoTo nuke
'FtpWebResponseを取得
Dim ftpRes As System.Net.FtpWebResponse = _
CType(ftpReq.GetResponse(), System.Net.FtpWebResponse)
'ファイルをダウンロードするためのStreamを取得
Dim resStrm As System.IO.Stream = ftpRes.GetResponseStream()
'ダウンロードしたファイルを書き込むためのFileStreamを作成
Dim fs As New System.IO.FileStream( _
downFile, System.IO.FileMode.Create, System.IO.FileAccess.Write)
'ダウンロードしたデータを書き込む
Dim buffer(1023) As Byte
While True
Dim readSize As Integer = resStrm.Read(buffer, 0, buffer.Length)
If readSize = 0 Then
Exit While
End If
fs.Write(buffer, 0, readSize)
End While
fs.Close()
resStrm.Close()
'閉じる
ftpRes.Close()
ErrFTP = 0
Return ErrFTP
Exit Sub
nuke:
ErrFTP = 1
Return ErrFTP
End Sub
で、素人ジジイながら、考えてみました
大初心者様もインターネットをされているので、プロパイダ契約されて
いると思います。通常、メールと、ホームページのエリアが付属で付いて
いると思います
ホームページのエリアに更新情報を置いて、プログラム起動時に、チェック
するようにします
通信手段としては、ホームページのアクセスで使う、HTTPプロトコロルか
データのアップダウンで使う、FTPプロトコロルかのどちらかを利用する
ことになります。(HTTPのほうが、ブロックされにくいので、問題は少ない
と思います)
一応FTPでの手順では、以下のような感じです
更新情報を一旦ファイルとしてダウンロードしてから開いています
多分、一旦ファイルにしなくてもいいように思いますが、その編は、詳しく
ありません。
ftpで通信できる環境があるのでしたら、まず、フリーのftpツールを使って
通信できるか確認してください
バージョン情報を記載したファイル
version.txt を準備します
中身は、数字のみ (数字の1~)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim FTPEr as Integer
FTPEr = Ftpdl("version.txt","version.txt")
IF FTPEr = 0 Then
'ダウンロードファイルを読み込みます
If System.IO.File.Exists(Application.StartupPath + "\version.txt") Then
Dim Reader As New IO.StreamReader(Application.StartupPath + "\version.txt")
Dim version as Integer = Reader.ReadLine
Reader.Close()
If version >現在のバージョン Then
MsgBox("最新バージョンが存在します")
起動させない情報を入れる
End if
Else
MsgBox("ファイルが存在しません")
End If
Else
Msgbox("ダウンロードエラーです")
End If
End Sub
Private Function Ftpdl(ByVal FileNam As String, ByVal LFileNam As String) as Integer
Dim UserName As String = "ログインユーザ名"
Dim UserPass As String = "ログインパスワード"
Dim ServerName As String = "ftp://xxxxx あなたのホームページのアドレス" & FileNam
Dim u As Uri
u = New Uri(ServerName)
'ダウンロードしたファイルの保存先
Dim downFile As String = Application.StartupPath + "\" + LFileNam
'FtpWebRequestの作成
Dim ftpReq As System.Net.FtpWebRequest = _
CType(System.Net.WebRequest.Create(u), System.Net.FtpWebRequest)
'ftpReq.ReadWriteTimeout = Val(Form1.TextBox18.Text)
'ftpReq.Timeout = Val(Form1.TextBox19.Text)
'ログインユーザー名とパスワードを設定
ftpReq.Credentials = New System.Net.NetworkCredential(UserName, UserPass)
'MethodにWebRequestMethods.Ftp.DownloadFile("RETR")を設定
ftpReq.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
'要求の完了後に接続を閉じる
ftpReq.KeepAlive = True
'ASCIIモードで転送する
ftpReq.UseBinary = False
'PASSIVEモードを無効にする
ftpReq.UsePassive = True
On Error GoTo nuke
'FtpWebResponseを取得
Dim ftpRes As System.Net.FtpWebResponse = _
CType(ftpReq.GetResponse(), System.Net.FtpWebResponse)
'ファイルをダウンロードするためのStreamを取得
Dim resStrm As System.IO.Stream = ftpRes.GetResponseStream()
'ダウンロードしたファイルを書き込むためのFileStreamを作成
Dim fs As New System.IO.FileStream( _
downFile, System.IO.FileMode.Create, System.IO.FileAccess.Write)
'ダウンロードしたデータを書き込む
Dim buffer(1023) As Byte
While True
Dim readSize As Integer = resStrm.Read(buffer, 0, buffer.Length)
If readSize = 0 Then
Exit While
End If
fs.Write(buffer, 0, readSize)
End While
fs.Close()
resStrm.Close()
'閉じる
ftpRes.Close()
ErrFTP = 0
Return ErrFTP
Exit Sub
nuke:
ErrFTP = 1
Return ErrFTP
End Sub
投稿者 るきお  (社会人)
投稿日時
2013/11/18 13:13:46
前提を確認させてください。
>例えば バージョンアップ(?)で前回作ったのを最新に変えてもらえるように
>最新ができた時に前作にメッセージを出して 使えなくさせる(?)ことってできますか?
前作も最新の両方残しておきたいけど、前作の方を起動した場合はメッセージを出してそれ以上は動作しないようにしたい。
ということでしょうか?
単純に、新作が出るたびに前作を上書きすればよいのであればインストーラーである程度制御可能だと思います。
この方法では通常のユーザーは何の問題もありませんが、パソコンに詳しいユーザーは上書きを回避して前作と新作の両方を使えるようにするということができてしまう場合があります。
>例えば バージョンアップ(?)で前回作ったのを最新に変えてもらえるように
>最新ができた時に前作にメッセージを出して 使えなくさせる(?)ことってできますか?
前作も最新の両方残しておきたいけど、前作の方を起動した場合はメッセージを出してそれ以上は動作しないようにしたい。
ということでしょうか?
単純に、新作が出るたびに前作を上書きすればよいのであればインストーラーである程度制御可能だと思います。
この方法では通常のユーザーは何の問題もありませんが、パソコンに詳しいユーザーは上書きを回避して前作と新作の両方を使えるようにするということができてしまう場合があります。
投稿者 大初心者  (社会人)
投稿日時
2013/11/20 16:28:34
すいません><
初めて作るので1つしっかりとしたのを作っとけば今後がうまく進むようにしたいので><
1つめはどうしてもしっかりと作っておきたいんです><
FFFTPをダウンロードしてきました FC2に登録し接続を確認しました
Version.txt には何を入れればいんでしょうか?
またどこに配置すればいいんでしょうか?
作成していただいた codeはForm1にいれればいいんでしょうか?
Form1に入れる場合前回のパスワード認証+作成していただいたのでいいんでしょうか?(問題ないでしょうか?
本当に質問が多く迷惑をかけてしまい... すいません><
初めて作るので1つしっかりとしたのを作っとけば今後がうまく進むようにしたいので><
1つめはどうしてもしっかりと作っておきたいんです><
FFFTPをダウンロードしてきました FC2に登録し接続を確認しました
Version.txt には何を入れればいんでしょうか?
またどこに配置すればいいんでしょうか?
作成していただいた codeはForm1にいれればいいんでしょうか?
Form1に入れる場合前回のパスワード認証+作成していただいたのでいいんでしょうか?(問題ないでしょうか?
本当に質問が多く迷惑をかけてしまい... すいません><
投稿者 nin  (社会人)
投稿日時
2013/11/20 21:34:21
一応前提は、起動時に最新バージョンがあるかを確認し、あれば、メッセージを表示し、起動させない
とのことで、続き回答します
Version.txt の中身は、現状のバージョンの数字です。1から順番に番号を増やします
サーバ上のVersion.txtをダウンロードして、現在のバージョン数字と比較します
例えば、Version.txtの中身が、数字の2として、起動しているプログラムのバージョンが1だとしたら、
If version >1 Then
の部分で、2>1 で新しいバージョンがあることが判断できます
作成したコードは、form1に記述してください
起動させない情報を入れる のところで、例えば、kidousasenai = 1 とセットします
ログインボタンのところで、
If kidousasenai = 1 then Exit Sub
プログラムを抜けさせて、ログイン動作を行わせないようにします
ただ、インターネットにつながらない場合(Version.txtを取得できない場合)は、どうするのかは
判断してください
kidousasenai の変数の宣言は、Form1_Loadと、buttonの両方で使うので、
Dim kidousasenai as Integer
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim FTPEr as Integer
外側の部分に記述します(表現の仕方がわかりません)
こちらも素人なので、ベストな方法かどうかは、なんともです
ではでは がんばってください
とのことで、続き回答します
Version.txt の中身は、現状のバージョンの数字です。1から順番に番号を増やします
サーバ上のVersion.txtをダウンロードして、現在のバージョン数字と比較します
例えば、Version.txtの中身が、数字の2として、起動しているプログラムのバージョンが1だとしたら、
If version >1 Then
の部分で、2>1 で新しいバージョンがあることが判断できます
作成したコードは、form1に記述してください
起動させない情報を入れる のところで、例えば、kidousasenai = 1 とセットします
ログインボタンのところで、
If kidousasenai = 1 then Exit Sub
プログラムを抜けさせて、ログイン動作を行わせないようにします
ただ、インターネットにつながらない場合(Version.txtを取得できない場合)は、どうするのかは
判断してください
kidousasenai の変数の宣言は、Form1_Loadと、buttonの両方で使うので、
Dim kidousasenai as Integer
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim FTPEr as Integer
外側の部分に記述します(表現の仕方がわかりません)
こちらも素人なので、ベストな方法かどうかは、なんともです
ではでは がんばってください
投稿者 nin  (社会人)
投稿日時
2013/11/20 23:28:07
何処に配置するかの回答ぬけていました。
ホームページエリアに、フォルダ /data を作ってその配下に配置します
FFFTPのツールを使ってフォルダ作成及び、version.txtをアップロードします
"ftp://xxxxxx.xxxx/data/"&
ホームページエリアに、フォルダ /data を作ってその配下に配置します
FFFTPのツールを使ってフォルダ作成及び、version.txtをアップロードします
"ftp://xxxxxx.xxxx/data/"&
投稿者 大初心者  (社会人)
投稿日時
2013/11/29 18:42:02
返信遅れてすみません><;
配置して起動する時に
型 'System.Net.HttpWebRequest' のオブジェクトを型
'System.Net.FtpWebRequest' にキャストできません。
と表示され、詳細.実行.終了 の選択がでますがどうすればいいんでしょうか?...
配置して起動する時に
型 'System.Net.HttpWebRequest' のオブジェクトを型
'System.Net.FtpWebRequest' にキャストできません。
と表示され、詳細.実行.終了 の選択がでますがどうすればいいんでしょうか?...
投稿者 nin  (社会人)
投稿日時
2013/12/1 12:52:46
ん~ HttpWebRequest どこにも使ってないのに、・・・。どの行でエラーになるか判りますですしょうか?
あと、パスワード認証の質問のところで、FTPではなく、HTTPでの方法を回答しています。
今回、FTPを使う必要性がないので、HTTPのほうがいいかと思います
書き直すと、以下のような感じです
Form2を、バージョンを判断して起動させます
あと、パスワード認証の質問のところで、FTPではなく、HTTPでの方法を回答しています。
今回、FTPを使う必要性がないので、HTTPのほうがいいかと思います
書き直すと、以下のような感じです
Form2を、バージョンを判断して起動させます
Dim kidousasenai As Boolean
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If kidousasenai Then MsgBox("最新バージョンが存在する為起動できません") : Exit Sub
Form2.Show()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'httpで、ファイルをダウンロード
Dim wci As New System.Net.WebClient()
Dim wcp As New System.Net.WebClient()
Try
wci.DownloadFile("http://あなたのサーバ名/data/version.txt", Application.StartupPath + "\version.txt")
Catch
MsgBox("ダウンロードエラーです")
End Try
wci.Dispose()
'バージョン確認処理
If System.IO.File.Exists(Application.StartupPath + "\version.txt") Then
Dim Reader As New IO.StreamReader(Application.StartupPath + "\version.txt")
Dim version As Integer = Reader.ReadLine
Reader.Close()
If version > 1 Then
MsgBox("最新バージョンが存在します")
kidousasenai = True
End If
Else
MsgBox("ファイルが存在しません")
End If
End Sub
最新ができた時に前作にメッセージを出して 使えなくさせる(?)ことってできますか?
またできるなら、名前の通り 本当に大初心者なので 必要な物(Buttonなど)と コード を
言っていただけると、とても嬉しいです。