カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

Windows更新プログラムのアンインストール

Windowsの更新プログラムは[コントロールパネル]-[プログラムと機能]-[インストールされた更新プログラムを表示]でアンインストールすることができます。
またコマンドプロンプトからもコマンドでアンインストールできるので、その方法をご紹介したいと思います。

まず、管理者権限にてコマンドプロンプトを起動します。
そして以下のコマンドを入力します。

wusa /unintall /kb:****

****はアンインストールしたい更新プログラムの番号です。
※wusa(wusa.exe)とはWindowsUpdateのスタンドアロンインストーラーです。

ただし、重要な更新プログラムはアンインストールできません。

上記のやり方でアンインストールできない場合があります。
どういった場合かというとネット経由でインストールしたOfficeの場合です。

そのため、何か不具合があってアンインストールしたい更新プログラムがあっても、ネット経由でインストールしたOfficeの場合、KB:****としては適用されていないそうなんです。

ではどうすれば良いのか??
コマンドでOfficeのバージョンをロールバック(ダウングレード)させる必要があります。

例)バージョンを15.0.5163.1000に戻したい。
以下のコマンドを実行します。

cd c:¥Program Files¥Microsoft Office 15¥ClientX86
officec2rclient.exe /update user updatetoversion=15.0.5163.1000

officec2rclient.exeの場所はバージョンによって異なります。
上記の例ではOffice2013の場合です。

1,221 views

Windows10でスタートアップ(起動)に問題発生

Windows10にて、起動時や起動してしばらくするとブルースクリーンが表示されるエラーが発生しました。

エラーの内容は

お使いのPCまたはデバイスは修復する必要があります
必要なファイルが見つからないか、ファイルにエラーがあるため、アプリケーションまたはオペレーティング
システムをロードできませんでした。

というものです。
私が遭遇したのはwinloadに関するエラーでした。

解決方法

スタートから設定を選択。

Windowsの設定画面で[更新とセキュリティ]をクリック

左のメニューから[回復]をクリック

右から「PCの起動をカスタマイズする」のところの[今すぐ再起動]をクリック

「オプションの選択」画面が表示されたら[トラブルシューティング]をクリック

「トラブルシューティング」画面で[詳細オプション]をクリック

「詳細オプション」画面で[自動修復]をクリック
自動修復を試してみます。

自動修復で解決できない場合は[コマンドプロンプト]を実行します。

「コマンドプロンプト」が表示されたら、以下のコマンドを実行します。

X:\windows\system32>bcdboot c:\windows /s c:

「c:\windows」は、Windowsシステムのルートの場所です。「c:」はブートパーティション。

ブートファイルは正常に作成されました。と表示されればOK。
私の場合、これでWindowsの起動に関するエラーが解消しました。

694 views

コマンド一発でテキストファイル結合

コマンドたった1行打つだけで、テキストファイルを結合することができます。

Linuxの場合

$ cat *.csv > all/all.csv

Windowsの場合

$ type *.csv > all/all.csv
2,790 views

外部サーバーのファイル有無を調べる

PHPにはファイルの有無を調べるfile_existsという便利な関数がありますが、
外部サーバーのファイルを確認することはできません。

そこで、HTTPヘッダーを取得し、ステータスコードからファイルの有無を確認してみましょう。

まずはHTTPヘッダーを取得。

$response = get_headers([任意のURL]);

取得したヘッダーからステータスコードを抜き出す。
ステータスコードは配列で返ってきたヘッダーの先頭にあるので、$response[0]の中から数字3桁をpreg_matchを使って抜き出します。

preg_match("/.*(\d{3}).*/", $response[0], $matches);

HTTPステータスコードを数値に変換。

$response_code = intval($matches[1]);

ステータスコードが200であればファイルが存在する、ということになります。


関数を作ると次のような感じになります。

function myFileExists($str_path)
{
    // HTTPヘッダーを取得
    $response = get_headers($str_path);

    // HTTPステータスコードを抜き出す
    if(preg_match("/.*(\d{3}).*/", $response[0], $matches)) {

        // HTTPステータスコードを取得
        $response_code = intval($matches[1]);

        if($response_code == 200) {

            return true;

        } else {

            return false;

        }

    } else {

        return false;

    }
}
1,941 views

日本的日付の加算・減算

以前、PHPでの日付の加算・減算についてご紹介しました。
その時の記事はこちら↓
日付の加算・減算 DateTimeクラス

その際、月の加減については31日が加減されると記載しました。

例えば12月31日に2ヶ月を加算した場合は、翌年の3月3日になります。

今回はそのような事態にならない回避方法をご紹介します。

// 基準とする日付のオブジェクトを生成する
$myDate = new DateTime("2018-12-31");

// 新規日付オブジェクトを生成
$newDate = new DateTime();

// 2ヶ月後の末日を取得
$newDate->setDate($myDate->format("Y"), $myDate->format("n") + 2 + 1, 0);

※日付に「0」を指定することで前月の末日を取得することができます。
3ヶ月前の末日を取得する

// 2ヶ月を加算する
$myDate->add(new DateInterval("P2M"));

echo $myDate->format("Y-m-d")."\n";

echo $newDate->format("Y-m-d")."\n";

ここでの出力結果

2019-03-03
2019-02-28
// 基準日オブジェクトと2ヶ月後末日との差を求める
$result = $myDate->diff($newDate);

//$resultには日付の間隔を表すDateIntervalオブジェクトが返されます。

if($result->invert == 1) { //間隔が負の数になっている場合は 1、そうでない場合は 0

    echo "newDate\n";
    echo $newDate->format("Y-m-d");

} else {

    echo "myDate\n";
    echo $myDate->format("Y-m-d");

}

出力結果は以下のようになります。

newDate
2019-02-28
1,285 views