日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
ラジコン
2024年5月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

アーカイブ

2007年01月 のアーカイブ

起動したプログラムが終了するまで待機するには


執筆:2007.01.22
編集:2007.01.22


起動したプログラムが終了するまで待機するには

関数、オブジェクト、クラス 言語 OS 関連関数
System.Diagnostics.Process .NET   Start()
WaitForExit()
Shell関数 VB.NET   Shell
WshShellオブジェクト    ?  Exec
Status
Sleep

System.Diagnostics.Process

Start(command)
Start(command, コマンド ライン引数)
WaitForExit()
WaitForExit(最大指定したミリ秒間待機)
[VB.NET]
Dim p as System.Diagnostics.Process
p = System.Diagnostics.Process.Start("notepad.exe")
p.WaitForExit()
 
[C#][C++]
System.Diagnostics.Process p;
p = System.Diagnostics.Process.Start("notepad.exe");
p.WaitForExit();
 
[Delphi .NET]
uses System.Diagnostics
// ..
   var p : System.Diagnostics.Process;
begin
  p := System.Diagnostics.Process.Start('notepad.exe');
  p.WaitForExit(); // 終了するまで待機します
end;
 

WshShellオブジェクト

[Delphi 32]
uses comobj;

procedure TForm1.Button1Click(Sender: TObject);
 var  WshShell , oExec : Variant;
begin
  try
    WshShell := CreateOleObject('WScript.Shell');
    oExec := WshShell.Exec('notepad.exe');
    // [Status]  WshRunning : 0 , WshFinished : 1
    while oExec.Status = 0 do Sleep(100);
  except
    WshShell := Unassigned;
  end;
end;
 
[VBScript]
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("notepad.exe")
Do While oExec.Status = 0
  WScript.Sleep 100
Loop

 ' msgbox "OK?"
 


参考

起動したプログラムの終了を待たない関数は
 ShellExec関数(Win32API)
などがあります。

バージョン管理 win編 Subversion(Quick Start)


執筆:2007.01.10


忘れっぽいので、覚え書きです。

※ Windowsで使う用途で記述していますが、Linux系なら標準で利用できるようです。

※ インストール後、試用20分間程度のまとめです。

インストールした経緯:
  StarTeamだと比較的最新のDelphi(BDS)以外管理できないし
 Winのソフトなどをcvsでバージョン管理しようとおもっていたのですが、
 cvsサイトにいっても、うまくファイルを揃えることができませんでした。
   そして偶然、Subversionという類似品を発見し、インストールしました。

下記の3つをそろえると、とても操作性がいいです。very good!

Subversionの構成
サーバー Subversion 本体です

管理データが
外部PCの場合は、いりません。
(たぶん)
クライアント TortoiseSVN エクスプローラーで
操作できるようになります
TortoiseSVN Language Packs 日本語言語ファイルを
もらいましょう。
自動インストーラーをお勧めします。

の3つをダウンロードします。

インストール直後の要点
環境変数の設定 インストーラーだと自動設定されていると思います。

手動の場合は。
マイコンピューター:プロパティから設定しましょう。
SET APR_ICONV_PATH="C:\Program Files\Subversion\iconv"
 

tortoisesvnのヘルプを見ながらテストしてみます。
日本語パックをインストールしてからのほうがいいと思います。

基本的に、tortoisesvnのヘルプを読むだけで操作できるようです。

データが消えると困るので
テストは、フラッシュメディアでやってみました。

同一PCで、管理と両方使う場合

1. リポジトリの root フォルダとして SVN という空のフォルダ (例: D:\SVN\) を作成します。
2. D:
cd D:\SVN
svnadmin create --fs-type bdb MyNewRepository
クライアント用途の場合は、ここからはじめます。

ここから下は、
使い方を誤ると、悲惨なことになりますので
消えても痛手を受けないような
フラッシュメディアなどのディスクでテストすることをお勧めします。

よーく 付属の説明書を読んでからにしましょう。
3. フラッシュメディアなどに
適当?にフォルダを作成します
MyProject\trunk
MyProject\branches
MyProject\tags

  5.2.1. リポジトリレイアウトを参照のこと
4. MyProjectフォルダを右クリックして、
 インポート をクリックします。
file:///D:/svn/MyNewRepository/MyProject

リポジトリブラウザでみてみましょう。
しっかりできていますね?
5. 適当な作業フォルダで
フォルダを右クリックして、
SVNチェックアウト
をクリックします。

作業フォルダにファイルがでてきましたか?
(.svnフォルダが隠し属性で作られています。)
  あとは、
付属の説明書をみながら、
楽しく、試用します。
そして、保存する構造を決定して運用します。

[tT]humbs.db    */[tT]humbs.db
*.[tT][mM][pP]  */*.[tT][mM][pP]
は共通の除外ファイルに設定していた方がいいでしょう?

Linux系にアクセスする場合は、大文字小文字を区別するので注意しましょう。

リポジトリのコピーの仕方。(バックアップ)
svnadmin hotcopy path/to/repository path/to/backup --clean-logs
詳しくは、説明書を参照。

【Tios】

誤登録などのデータの完全削除
 
tortoisesvnでは、できないそうです。
(B.4.3. svndumpfilter の使用)

svndumpfilter を利用します。
 svnadmin dump
 svnadmin load
を使います
:後述


【ここがいまいち】

変更差分を表示するで、EUCだと文字化けする
(ブラウザみたいに表示する文字コード変更がない)

SJISとutf8でテストした限りは大丈夫っぽかった。
一度登録すると、削除しても変更履歴として残り 閲覧可能。
保護する面では、ある意味そうあるべきですが、

指定したリビジョンの完全削除くらいほしいところ
無視リストにファイルを入れて更新した後、
無視リストから削除をしても コミットできない。
(バグかもしれない)

ほかの更新と合わせると適用される。
  変更単位は、リビジョン毎(コミット単位)

従って、不要なリビジョンを削除した時に
更新チェック時の問題が発生します。

ファイル単位でやって欲しい気が・・・
リポジトリブラウザの
 右クリックメニューに
ここを 圧縮して保存が欲しい!!

自分で作ってもいいが・・・

機能要望にだそうヨ!!

【最後に】
 古いバージョンも同時に、修正したりしたかったので
 いいツールが無料で見つかってよかったです。

自動バックアップは、.vbsに処理を書くからいいとして

 いままで、古いプロジェクトをlzhかzipに圧縮してたので、
いままでどうり、
ソースとかを zip,lzh,gzのどれかで、自動保存もしてくれると非常にありがたいのですが・・・
イベントが登録できるようなので
やり方は、おぉおぃ探すことにしましょう。


【削除と再構築編】
 完全に消したいデータが、でてきた場合には避けられない。

手順 完全削除には、リポジトリの作り直しが必要?
  パイプ | でつなげるのも可。
リダイレクト ><
(詳しくはヘルプ MSDOSを参照)

?作業がおわるまで、ロックする?。

svnadmin dump D:/svn/oldrepo > repos-dumpfile

上記のでは、infile-dumpfileには、repos-dumpfileを指定します。
 注意:後述の説明をみましょう。
svndumpfilter exclude --drop-empty-revs "/削除するパス" < infile-dumpfile > outfile-dumpfile

svnadmin create --fs-type bdb D:/svn/newrepo1

svnadmin load D:/svn/newrepo1 < outfile-dumpfile

D:/svn/oldrepoフォルダの名称変更または、削除します。

次にnewrepo1の名称を変更します
newrepo1をoldrepoに名称変更
rename D:/svn/newrepo1 D:/svn/oldrepo
  構築後の問題

--drop-empty-revs を指定すると
・リビジョン番号の番号詰めが行われます。
・バグツールと連携している場合、番号が照合しなくなる可能性があります。

一般公開している場合は、--drop-empty-revs は指定しない方が無難でしょう。


作業フォルダの更新でエラーの場合は、
作業フォルダ内の
必要なファイルを別の所に移動して、チェックアウトからやり直し。
予期しないデータの破損をするおそれが高いので
・バックアップを忘れない。保存しておく。
・説明書をよく読み理解しておく

 

Indyの最新版のインストールの仕方[Delphi2005]


執筆:2007.01.05
編集:2007.03.19
編集:2007.07.09
編集:2007.07.18
編集:2007.11.24
編集:2009.10.16
編集:2015.11.21
編集:2017.04.07


記事の内容が古いので注意してください。 最新の内容ではありません。

10.0.52は、かなり古いので
cookieのドメインの最初が .で始まっていると処理できずエラーになります。
(IdCookie、IdCookieManager)
(10.1.6でも直っていませんでした。:2007.3、2007.7)
(10.2.3でも直っていませんでした。:2007.10)
(10.5.7 IndyTiburon.zipで修正されているようです。:2009.10)
(10.6.2.0 svnid:5315 : 2015-11 修正が必要でしたがDelphi2005にインストールできました)
(10.6.2.0 svnid:5412 : Delphi2005にインストールできました)


最新版のインストール方法

最新版の入手先

ダウンロード http://www.indyproject.org/Sockets/Download/DevSnapshot.en.aspx
ZIP/Indy10_~.zip をダウンロード。

svn http://www.indyproject.org/Sockets/Download/svn.EN.aspx

https://svn.atozed.com:444/svn/Indy10/trunc

» 続きを読む

Win Apacheでperlを1行目無視でcgi実行するには


執筆:2006.12.27
編集:2007.01.04


 普通に実行するには、httpd.confに
 Options +ExecCGI 
 AddHandler cgi-script .cgi
を書くだけで使えるでしょう。

そういう人は、これを読んでも意味がありません。

私のような、開発はWin 、サーバーはunix系だと
困ったことになるのです。

・Cygwin(Win上で動くLinux)のApache
・Anhttpdサーバー
・仮想OSを使ってApache
・Win Apacheで無理矢理変換

などの選択がありますが、ここでは、無理矢理変換をやってみましょう。

Winでは、
CygwinのApacheやAnhttpdサーバー
を使えばなんの苦労もなく実行できるのですが

Win Apacheを使うと スクリプトの最初が
#!/usr/local/bin/perl
#!c:/prog..../perl.exe
と指定の仕方がちがうのでーす

※CygwinのApacheつかえって つっこみは抜きでお願いします。


それで 、直接ハンドラを変更してみると 内部エラー・・・・
unix系で できるのになぜ?

Anhttpdサーバー的な使い方をしたいのですよ!!

いろいろ条件を変え、試して、
どうもWinのperl.exeは、環境変数をよんでくれない?
という結論にいたりました

直接perl.exeにおくらず
仲介ソフト+リダイレクトを通すことにしました。

やっていることは、
カレントディレクトリを変更して
STDINをファイルに書き出して
PATH_INFO
PATH_TRANSLATED
から
単に、コマンド実行させて結果をファイルに保存して、
そのファイルをコンソールにはきだすだけです。

ここで問題になるのが実行の同期問題です。
コマンド実行がくせもので、Win32アプリですと
言語はなんでもいいのですが
Shellexecでは「実行待ち無し」にしかできないので
「実行待ちができる」Shellコマンドを使うのですが、なぜかVBにしかないのです。
VBはもっていないので
Delphi2005でコンパイルできる VB.netで作ってみました。
 (ShellがないためにDelphi → Delphi.net → VB.net という経過をたどりました。)
つい慣れている環境で作ろうとしてしまうので・・・おもわぬところでつまづきました。 
VB.netはコード支援が働かないのでヘルプを見ながらコピペでペタペタと・・・

実行ファイルも7KBと小さいので、問題なしです。

本気でWin運用するには、
Win apacheではなく、仮想OSかCygwin上の方が
全角文字問題やmodrewriteの動作異常につきあわずに済みます。
またそのほうがセキュリティ的にいいと思います。

しかし、記憶容量やメモリや、実行速度の問題で
テストにしか使わないのに、いちいちそんなことできませんよー
というときに この技は 便利なんです。

  ScriptAlias /perl_MyCgi/ "c:/。。。/Perl/bin/"
  Action cgi-script "/perl_MyCgi/perl.exe"
これで 動けば一番いいのですが動かないのです。
※この方法で最近のphpは、動くようです。(php-cgi.exe)。
※perl.exeが馬鹿なので仕方がないです

そこで

※CygwinのApacheつかえって つっこみは抜きでお願いします。

やり方は、非常に簡単です。
●ハンドラのオーバーライト(httpd.conf)
  ScriptAlias /perl_MyCgi/ "c:/。。。/Perl/bin/"
  AddHandler perl_cgi .cgi
  Action perl_cgi "/perl_MyCgi/perl_cgi_vb/perl_cgi_vb.exe"
●仲介ソフトの設置(ここでは、perl_cgi_vb.exe)
(※パスの全角文字は壊れるようなので、全角を含む場合は、Cygwinを検討しましょう)

ついでに、スクリプト内でのOSの確認は
if  (index($^O,'Win')>=0) {  }  
みたいな感じで分岐できます。MSWin32


わぁ。やったぁ・・・
 そ の ま ま
  う ・ ご ・ い ・ た

しつこいですが、
※CygwinのApacheつかえって つっこみは抜きでお願いします。

※本気で使う場合は、CygwinのApacheか、仮想OS上で普通に使うほうが安全です。


仲介ソフト のコード(一部)
 VB.net  (Shellを利用するため)
PerlのPath  dim rk  as Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Perl")
   if Not(IsNothing(rk)) then
       Perl_exe_Path = rk.GetValue("BinDir","")
   End if
環境変数
の取得
PATH_INFO  = Environment.GetEnvironmentVariable("PATH_INFO")

PATH_TRANSLATED = Environment.GetEnvironmentVariable("PATH_TRANSLATED")
コマンドの
エスケープ用
Function QuotedStr(S as String)
       Dim c as Char
       c = """"  ' ややこしくなるので単純化
       Return c + S.Replace(c, c+c) + c
End Function
  Sub MakeStdinFile()
       dim AFileStream as FileStream
       Dim standardInput as Stream
       dim b as byte
       dim i as integer
      ' STDIN の内容を書き出す
       Temp_IN_FileName = getTempFileName()
       AFileStream = new FileStream(Temp_IN_FileName,FileMode.Create)
       standardInput = Console.OpenStandardInput()
       ' Seekをサポートしていないので 最後にきたかを判定。
       ' ReadByte() 終わりだと -1
       Try
         i = standardInput.ReadByte()
         While (i>-1)
           if (i = -1) then exit While
           b = Cbyte(i)
           AFileStream.WriteByte(b)
           i = standardInput.ReadByte()
         End While  '   Wend
       Finally
         AFileStream.Flush()
         AFileStream.Close()
       End Try
    End Sub
作成関数 Sub MakeStdinFile()
Sub DeleteStdinFile()
Sub DeleteTempFile()
Function getTempFileName() as string
Function cmd() as string
Function QuotedStr(S as String)
Sub ExecCGI()  ' shell
その他
使用したクラス
FileStream
Console.OpenStandardInput()
Console.OpenStandardOutput()

概要
 Stdinの内容をstandardInput.ReadByte()でファイルに納め、
コマンドとともにリダイレクトし、
結果ファイルを、FileStreamでreadbyteで読み込みながら
Console.OpenStandardOutput()へwitebyteで出力します。


CygwinやLinuxの場合。

普通に、
httpd.confに
 Options +ExecCGI 
 AddHandler cgi-script .cgi
を書くだけで使えるでしょう。

/usr/bin/perl

/usr/local/bin/perl
の場合に対応できるように

perlが入っていることを確認して
/usr/binと/usr/local/binにシンボリックリンクがあるか確認しましょう。
Cygwinの場合、ln -s /usr/bin/perl /usr/local/bin/ perl
で、リンクを追加しておけば、特に困ることはないと思います。

OpenOffice2を試してみる2006


※ この記事の内容は古くなっています


執筆:2006.12.26


 OpenOffice2の実力を試してみる。


まずは、他形式の読み込みから

  結果 ファイル形式 フィルタ名 備考
一太郎10 × 一太郎10。
たんなる小さな平凡な表
Ichitaro 8/9/10/11 一般的なIOエラー
word2000 簡単な表 
Excel2000 表:ちっぽけな簡単な計算式
lotus123 2000 グラフ付きの簡単な表。
グラフが消滅。
         

という感じで、これ以上
試す気力を失いました。

Wordに関しては、OpenOffice1の時よりは、マシになっている気はします。

HTML編集機能も、操作性・機能からすると使いにくそうで
使う気にはなりません。


どちらにしても
マクロがVBAではなくBasicを採用している時点でこのソフトおわっています。
マクロBasicは、難解なので キ・ラ・イ

xml編集機能以外、office2000よりいいと思う点がなにもないので
OpenOffice3に期待して
OpenOffice2はアンインストール。 さらばOpenOffice

$ /usr/sbin/apachectl2 start
/usr/sbin/apachectl2: line 78: 4072 Bad system call $HTTPD -k $ARGV


cygrunsrvを入れる。


cygserver-config

net start cygserver

/usr/sbin/apachectl2 start


うごかないのであきらめる・・・

apache1をいれapache2を削除指定

/usr/sbin/apachectl start

うごいたのでヨシとしよう。

» 続きを読む



PR

[PR]