現在、バーコードスキャナを使用して2Dバーコードテキストを読み取る.NET 4.5.1アプリケーションを開発中です。そのためには、Microsoft POS for .NET 1.14.1がインストールされ使用されています。バーコードスキャナ(Intermec/Honeywell ED40)ドライバが正しくインストールされ、OPOSドライバがアンマネージOCXになります。POS for .NETバーコードスキャナDeviceEnabledの設定に失敗しました
私は、WinFormsのプロジェクトでスキャナーインスタンスを作成するために、典型的なワークフローを使用:アプリケーションが管理者権限を使用して開始された場合
public partial class MainForm : Form
{
private PosExplorer _explorer;
private Scanner _scanner;
public MainForm()
{
InitializeComponent();
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
_explorer = new PosExplorer(this);
DeviceInfo device = myPosExplorer.GetDevice(DeviceType.Scanner, "Intermec_RS-232_Scanner");
_scanner = (Scanner)explorer.CreateInstance(device);
_scanner.Open();
_scanner.Claim(1000);
_scanner.DataEvent += scanner_DataEvent;
_scanner.ErrorEvent += scanner_ErrorEvent;
_scanner.DeviceEnabled = true; // throws here if normal user privileges
_scanner.DataEventEnabled = true;
_scanner.DecodeData = true;
}
}
すべてが正常に動作します。ただし、通常のユーザー権限で起動した場合は、スキャナを有効にすることはできません。 scanner.DeviceEnabled = true
文を実行すると、次の例外がスローされます。
PosControlException: Failed to set property DeviceEnabled.
私が提供マイクロソフトのサンプルの「Microsoft POSテスター」をコンパイルして起動する場合にも同じ問題が、発生します。しかし、あらかじめコンパイルされたバージョン "C:¥Program Files(x86)¥Microsoft Point of Service¥SDK¥Samples¥Sample Application¥TestApp.exe"も権限とは独立して動作します。
さまざまなフォーラムやPOS for .NETのドキュメントで解決策が見つかりませんでした。私は同じ問題ActiveXのInternet Explorerのセキュリティ設定でいくつかの実験を行った。私は、それは誰かがアイデアを持っているかのようなセキュリティ設定であると思いますか?
環境:
- のWindows 7のPro x64の
- .NET 4.5.1
感謝。
編集:
多くの時間後、私はその理由を発見した、それはレジストリの仮想化しました。製造元のOPOSドライバ(OCX)は、HKLM/Software/Wow6432Node/Intermecサブキーに書き込みを試みます。したがって、書き込みアクセスは、HKEY_USERS/[ユーザーSID] _Classes/VirtualStore/Machine/Software/Wow6432Node/Intermecに仮想化されました。しかし、仮想ストアのキーは不完全であり、多くの価値が失われていました。
ソリューション:
- は仮想店舗でHKEY_USERS/[ユーザーSID] _Classes/VirtualStore /機械/ソフトウェア/ WOW6432NODE /インターメックキーを削除します。
- 割り当て元HKLM /ソフトウェア/ WOW6432NODE /インターメックキー用のWindows ユーザーグループへのフルアクセス権限を。したがって、すべてのユーザーが同一のレジストリキーにアクセスします。
あなた自身の質問に答えることができますが、質問からの回答を編集してそれを行うことはできますか? – TheLethalCoder