技術メモ

【C#】オブジェクト グラフを Null にすることはできません。エラーが発生する

エラー内容

System.ArgumentNullException: オブジェクト グラフを Null にすることはできません。
パラメーター名:graph
   場所 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
   場所 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)

原因

BinaryFormatterのSerialize()の第2引数に渡す値がnullだった。。。
エラーメッセージが分かりにくかったのでメモ。

 

【Windows Server 2022】評価版の期限を延長する

コマンドプロンプトで、以下のコマンドを入力する

slmgr -rearm

入力後、Windowsを再起動する。
再起動した結果、180日延長された。

尚、何回も延長することはできないようだ。
あと何回延長できるかは以下のコマンドで調べられる。

slmgr /dlv

残りの延長可能回数が表示される。

 

 

【C#】Linqで同一名称のデータが何件あるかカウントする

次のようなSampleDataというクラスがあるとする。

public class SampleData
{
    public int Id;
    public string Name;
}

ここでは、SampleDataのNameが同一のデータが何件存在するかをカウントする。

var sampleDataList = new List();
sampleDataList.Add(new SampleData() { Id = 1, Name = "山田" });
sampleDataList.Add(new SampleData() { Id = 2, Name = "田中" });
sampleDataList.Add(new SampleData() { Id = 3, Name = "鈴木" });
sampleDataList.Add(new SampleData() { Id = 4, Name = "山田" });

foreach (var itemCount in sampleDataList.GroupBy(x => x.Name)
                                        .Select(x => new { Name = x.Key, Count = x.Count() }))
{
    Console.WriteLine($"{itemCount.Name} 件数:{itemCount.Count}");
}

実行結果

山田 件数:2
田中 件数:1
鈴木 件数:1

 

 

【C#】CheckBoxのチェックがダブルクリックしないとつかない

(たぶん、遭遇する機会はほとんどないと思う・・・)

WindowsFormに配置したCheckBoxが、シングルクリックしてもチェックがON/OFFにならず、ダブルクリックするとON/OFFできるという現象に遭遇。

原因は、このチェックボックスのMouseDownイベントが実装されていたため、そちらでイベントが処理されてCheckBoxのチェックが変わらなかった。
MouseDownイベントは使っていなかったので、削除したらチェックされるようになった。

 

【SignTool】”Error: SignerSign() failed.” (-2146869243/0x80096005)エラーが発生してコードサイニング証明書を付けることができない(SECTIGO/COMODO)

エラー内容

Done Adding Additional Store
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2146869243/0x80096005)

エラーが出ないように修正したコマンド

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86\signtool.exe" sign /fd sha256 /f %証明書パス% /p %証明書パスワード% /tr http://timestamp.digicert.com /d %アプリ名% %EXEパス%

ポイント:http://timestamp.sectigo.com/rfc3161ではなく、http://timestamp.digicert.comとすればOK

(参考)証明書の検証コマンド

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86\signtool.exe" verify /pa "C:\temp\sample.exe"

実行結果

File: C:\temp\sample.exe
Index  Algorithm  Timestamp
========================================
0      sha256     RFC3161

Successfully verified: C:\temp\sample.exe

ポイント

【Visual Studio】フォームのデザイナを開くと「’子’ はこの親の子コントロールではありません。」エラーが発生する

継承元フォームを指定したフォームのデザイナを開いたところ、「’子’ はこの親の子コントロールではありません。」エラーが発生してデザインを変更することができない。

同じフォームを継承した別フォームは開ける。Visual Studioを再起動しても変わらず。

フォームの.Designer.csを開き、以下のような継承元に存在しているコントロールのSetChildIndexの行を削除してみたら、開くことができるようになった。

this.Controls.SetChildIndex(this.LabelTitle, 0);

なぜこうなったかの原因は不明・・・

 

 

【C#】AutoScrollが表示されているか確認する

フォームのAutoScrollを有効にしている場合に、実際にスクロールバーが表示されているかは以下のプロパティで取得できる

//右端のスクロールバーが表示されているか
Console.WriteLine(this.VerticalScroll.Visible);

//下のスクロールバーが表示されているか
Console.WriteLine(this.Horizo​​ntalScroll.Visible);

 

 

 

【VMWare Player】仮想マシンをアップグレードしてくださいと表示され、起動できない

かなり昔のVMWare Playerで作成した仮想マシンを、VMWare Workstation 16 Playerで起動しようとしたところ、以下のエラーメッセージが表示され、起動できなかった。

パワーオン中にエラーが発生しました: 仮想マシンは、このバージョンの VMware Player ではサポートされていないハードウェア バージョンを使用しています。前のバージョンの VMware Player を使用して仮想マシンをアップグレードしてください。

モジュール Upgrade のパワーオンに失敗しました。

仮想マシンの起動に失敗しました。

とりあえず起動させたかったので、拡張子が.vmxのファイルをテキストエディタで開き、「virtualHW.version = “3“」を「virtualHW.version = “18“」(18 = Workstation Player 16.x)に書き換えてみたところ、起動した。
参考ページ

ゲストOS起動時にドライバの再インストールなどが自動で行われたが、特に問題なく使えるようになった。但し、直接バージョンを書き換えて起動させたためにどこかで不具合が出る可能性がある。書き換えて起動させる前に、.vmxファイル以外にもすべてのファイルを別の場所にコピーしてバックアップを行った後に、試した方がよさそう。

 

【C#】フォームのサイズを変更した際に、Paintでうまく描画されない

フォームのPaintイベントで背景などを描画している場合、フォームのサイズを変更した際に、Paintがうまく描画されない場合がある。

この場合、フォームのDoubleBufferedを確認する。Trueになっていれば、Falseにすれば正しく描画されるようになった。