スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【同じタグを付けた記事の一覧】

Windows Live Sync を粘り強くする(確認メッセージ編)

2009年12月28日(日)21時42分

確認メッセージ

現在我が家では Windows Live Sync のファイル中継用サーバとして、古くなって引退状態だったノート PC を現役復帰させて使っています。
このノート PC は普段、液晶画面を閉じた状態で稼動させているわけですが、時々 Windows Live Sync が確認メッセージを出して動作を中断しているときがあります。
とりあえず見たことのある確認メッセージは以下に挙げる三つがありますが、いずれも PC の処理速度や回線の速度が極端に遅い等の特殊な状況でないと発生しないものかもしれません。

Windows Live Sync: ファイルを作成できません

Windows Live Sync: ファイルを作成できません

一つ目はこの「Windows Live Sync: ファイルを作成できません」メッセージです。
確実に出るのがわかっているのは書き込み権限がないフォルダを共有設定に含めようとしたときですが、その場合は当然そのフォルダの書き込み権限を変更しなければ出続けます。
それ以外では巨大で頻繁に更新されるファイルで発生しやすいので、変更されたファイルの同期処理中に再変更された場合などに、書き込みのためのファイルロックとその解除のタイミングがずれるために起こるのではないかと思うのですが詳細はわかりません。
そして書き込み権限がありディスク容量に問題がないにもかかわらずこれが出た場合、「再試行」ですんなり処理が進む場合も稀にあるのですが、たいていの場合何度「再試行」しても出続けます。
なのでこれが出たときは一度「終了」を押すと表示されるウインドウ

終了してよろしいですか?

の「終了してよろしいですか?」に対して「はい」を押して Windows Live Sync を終了させ、その後に再起動させています。

Windows Live Sync: ファイルが見つかりません

Windows Live Sync: ファイルが見つかりません

二つ目はこの「Windows Live Sync: ファイルが見つかりません」です。
発生条件はよくわからないのですが、例えば「デスクトップ PC + サーバ PC」状態で使っているときに、新たに「ノート PC」を起動させて同一フォルダに対して三つ巴での同期が始まるようなときなどに発生しやすいような気がします。
この確認メッセージは「ファイルを残す」か「フォルダーからファイルを削除する」のどちらかを選択しないと「OK」しても選択するムネのメッセージが出て再度表示されます。
このメッセージが出た場合、削除すると場合によっては取り返しがつかないので、無難に「ファイルを残す」にしています。

Windows Live Sync: ファイル内で変更が検出されました

Windows Live Sync: ファイル内で変更が検出されました

最後三つ目は「Windows Live Sync: ファイル内で変更が検出されました」ですが、これはメイン PC(作業してる側)で見たメッセージなのでサーバ PC(ファイルを蓄積するだけ)では出ないかもしれません。
これが出たのは、同期フォルダ内に存在するフォルダを一度削除し、すぐにバックアップしておいた以前のフォルダを書き戻したときだったので、「削除するはずだったのと同じようなファイルが復活してるけどどうすんの?」的な確認かと思います。
これも同じく「ファイルを削除する」か「ファイルのコピーをフォルダーに戻す」のいずれかを選択しなければなりませんので、やはり無難に「ファイルのコピーをフォルダーに戻す」にします。

自動選択スクリプト

とりあえず上記三つが確認できた Windows Live Sync の動作が中断される要因ですので、これらの確認メッセージが出ているかどうかを定期的にチェックして、出ていれば自動で選択して流してしまうスクリプトを書いてみました。
下記スクリプトをクリップボードにコピー(ソースコード右上に表示されるアイコンの左から二番目をクリック)して「メモ帳」にでも貼り付けて「WlsKeeper.js」とでも名付けて保存します。
なお、このスクリプトは「Windows Live Sync: ファイルを作成できません」メッセージが出ると Windows Live Sync を終了させてしまうため、前回で書いた再起動スクリプトとの併用が必須となります。

//ウインドウ監視間隔。ミリ秒。
var WaitTime=1000;
//ログ文字列を書き出すかどうか。真偽に関係なくログファイル自体は生成される(二重起動防止のため)。
var LogMode=true;

//二重起動防止のためのファイルを生成しログファイルとして使用する。
var Shell=WScript.CreateObject('WScript.Shell');
var fso=WScript.CreateObject("Scripting.FileSystemObject");
var LogPFEName=fso.BuildPath(fso.GetParentFolderName(WScript.ScriptFullName),fso.GetBaseName(WScript.ScriptFullName))+".log";
var LogFile=null;
try
{
	LogFile=fso.OpenTextFile(LogPFEName,2,true);
}
catch(e)
{
	Shell.Popup("すでに実行中であるか、ログファイルが生成できないため、終了します。",0,"Windows Live Sync Keeper");
	WScript.Quit();
}

while(true)
{
	if(Shell.AppActivate("Windows Live Sync: ファイルを作成できません"))
	{
		Shell.SendKeys("{TAB}{ENTER}");
		if(LogMode)OutputLog("Windows Live Sync: ファイルを作成できません");
		WScript.Sleep(WaitTime);

		while(true)
		{
			if(Shell.AppActivate("終了してよろしいですか?"))
			{
				Shell.SendKeys("{ENTER}");
				if(LogMode)OutputLog("終了してよろしいですか?");
				break;
			}
			WScript.Sleep(WaitTime);
		}
	}
	WScript.Sleep(WaitTime);

	if(Shell.AppActivate("Windows Live Sync: ファイルが見つかりません"))
	{
		Shell.SendKeys("{LEFT}{LEFT} {ENTER}");
		if(LogMode)OutputLog("Windows Live Sync: ファイルが見つかりません");
	}
	WScript.Sleep(WaitTime);

	if(Shell.AppActivate("Windows Live Sync: ファイル内で変更が検出されました"))
	{
		Shell.SendKeys("{LEFT} {ENTER}");
		if(LogMode)OutputLog("Windows Live Sync: ファイル内で変更が検出されました");
	}
	WScript.Sleep(WaitTime);
}

function OutputLog(LogText)
{
	var LogLine="";
	var LogDate=new Date();
	LogLine="[";
	LogLine+=
		LogDate.getFullYear() *10000000000+
		(LogDate.getMonth()+1)*100000000+
		LogDate.getDate()     *1000000+
		LogDate.getHours()    *10000+
		LogDate.getMinutes()  *100+
		LogDate.getSeconds()  *1;
	LogLine+="]";
	LogLine+=LogText;

	try
	{
		LogFile.WriteLine(LogLine);
	}
	catch(e)
	{
		WScript.Echo(LogLine);
	}

}

説明

起動すると、上記3つの確認メッセージを1秒間隔で順に検索する(つまり3秒で一巡する)動作をひたすら繰り返します。
見つかったらそのウインドウをアクティブ化(最前面になる)し、SendKeys 命令(アクティブウインドウに対してキーコードを送信する)を使って必要な操作を行ってます。
ですので「アクティブ化→SendKeys 命令」の間に万一にも他の操作が割り込むと、全く関係ないウインドウにキーコードが送信されて誤動作することになりますので、「Windows Live Sync 専用のサーバ PC」のような、他の操作が割り込む余地がほとんどない環境で運用するのが無難です。
また、このスクリプトは二重・三重に実行しても意味がないどころか、上記の理由で誤動作の要因にすらなりかねないのですが、一度実行すると永久ループで無言で動作し続け、中断・終了させる一般的な手段が提供されません。
なので二重起動を回避するために、最初に空のテキストファイルを生成して、それを終了まで保有し続けています。
こうすることで、二重起動された場合は、最初に同名のテキストファイルを作ろうとして、すでに実行中のスクリプトによってロックされているため失敗し、そのまま終了することになります。
生成したテキストファイルはログファイルに流用しています。

注意

  • 繰り返しになりますが、前回掲載した Windows Live Sync 再起動スクリプトとの併用が必須となります。
  • 二重起動回避を兼ねたログファイルを生成しますので、スクリプトファイルは書き込み可能な場所に存在する必要があります。
  • WinXPsp3 で Windows Live Sync 単独実行の環境でしか動作確認をしていません。
  • Windows Live Sync は「バージョン 2008 (ビルド 14.0.8089.0726)」でしか動作確認をしていません。
関連記事

【同じタグを付けた記事の一覧】
自作ソフト バックアップ ポータブル WindowsLiveMesh

スポンサーサイト

コメントの投稿

非公開コメント

最新記事
最新コメント
Amazonおまかせリンク
カテゴリ
タグクラウド
Amazonお買い得ウィジェット
カレンダー
07 | 2017/08 | 09
- - 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 - -
月別アーカイブ
プロフィール

電脳太助

Author:電脳太助
Website:電脳スピーチ web

RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

サイト内検索
Ads by Google
FC2アクセスランキング
Ads by Google
FC2拍手ランキング
ユーザータグ

音楽管理(66)
ポータブル(57)
ソフト紹介(44)
プログラミング(42)
音声技術(41)
自作ソフト(35)
サイト運営(32)
FC2(31)
ブログ(30)
iTunes(27)
Windows(25)
LISMO(24)
音声合成(23)
音声認識(22)
x-アプリ(22)
電子ブック(22)
eラーニング(20)
バックアップ(19)
語学学習(19)
foobar2000(18)
ソースコード(18)
WindowsLiveWriter(15)
画像管理(15)
C++(14)
アフィリエイト(10)
DnspTools(10)
fi-6130(9)
FLAC(9)
JavaScript(9)
ウォークマン(9)
英語音読学習計画(8)
Gracenote(8)
Prolog(8)
ベクター(8)
雑記(8)
CodeBlocks(7)
SyntaxHighlighter(7)
TraConv(7)
spcbght(7)
wxWidgets(7)
VirtualBox(6)
W63CA(6)
DCP-J552N(6)
WinRT(6)
WindowsLiveMesh(6)
iGoinLM(6)
英語発音矯正実験(6)
ExactAudioCopy(6)
MP3Gain(6)
LAME(5)
音楽技術(5)
Mery(5)
楽器演奏(5)
GalateaTalk(4)
nLite(4)
WindowsLiveSkyDrive(4)
ホームページ(4)
GalateaProject(4)
MIDI(4)
LLVM(4)
PC-98(3)
カウンター(3)
AACGain(3)
iTCDini(3)
OverCutChecker(3)
拍手(3)
PK-513L(3)
UniversalExtractor(3)
アクセスランキング(3)
ImageCompositeEditor(2)
アクセス解析(2)
OCR(2)
qtaacenc(2)
資格試験(1)
AquesTalk(1)
AquesCmdDl(1)

FC2アクセスランキング
最新トラックバック
アクセスランキング
[ジャンルランキング]
コンピュータ
135位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
16位
アクセスランキングを見る>>
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。