1

私は簡単な方法でappcert.exeを自動的に実行する良い方法を取得しようとしています。

パッケージの完全なパッケージ名を取得する方法を一生理解することはできません。たとえば、というタイトルのアプリケーションがありますがTwitterDemo、Get-AppxPackageを実行すると、そのアプリケーションはリストされていないように見えます(おそらく次のようなものとしてリストされていc2934-289aa9-394...ます。また、PowerShellからGet-AppxPackageを使用することに依存していませんでした。次に、出力を解析したり、通常のコマンドラインに移動したりします。.NetからパッケージデータベースをクエリするためのAPIはないようで、C++APIはかなり複雑に見えます。

それで、基本的に、アプリケーションの「タイトル」をその完全なパッケージ名に一致させる最も簡単な方法は何ですか?

4

3 に答える 3

1

パッケージのパッケージの完全な名前を確認するには、複数の方法があります。実行中のプロセス、インストールされたパッケージ、または単なる定義情報がありますか?

実行中のプロセスがある場合は、GetPackageFullName () が最適な方法です。

インストール済みのパッケージがある場合、Powershell はおそらく人間にとって最も便利です。現在のユーザーにインストールされているすべてのパッケージを一覧表示するには: powershell -c $(Get-AppxPackage).PackageFullName PackageManagerFindPackages () メソッドを使用して、プログラムで同等の操作を実行できます。

パッケージの ID がわかっている場合は、 PackageFullNameFromId ()を介してそのパッケージのフルネームを計算できます。

于 2012-10-24T06:06:12.267 に答える
0

appcertを自動化するために外部アプリを作成していると想定しています。また、これはwin32アプリだと思います。この場合、win32 API GetPackageFullNameを使用して、プロセスハンドルを指定して、フルネームをパッケージとして取得できます。したがって、以下の例では、リストボックスとボタンをアプリに追加して、次のコードを作成しました。

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetPackageFullName(IntPtr hProcess, ref UInt32 packageFullNameLength, StringBuilder fullName);

public Form1()
{
    InitializeComponent();
    listBox1.DataSource = System.Diagnostics.Process.GetProcesses();

    listBox1.DisplayMember = "ProcessName";
}


private void button1_Click(object sender, EventArgs e)
{
    var proc = listBox1.SelectedItem as System.Diagnostics.Process;
    uint len = 250;
    StringBuilder sb = new StringBuilder(len);
    var err =  GetPackageFullName(proc.Handle, ref len, sb);

    MessageBox.Show(sb.ToString());     
}
于 2012-10-22T17:53:15.377 に答える
0

最も簡単な方法は、Windows.Management.Deployment.PackageManager を使用することです。これで問題が完全に解決するわけではありませんが、私の設計は少し範囲が広すぎたと思います。

于 2012-10-23T14:43:47.253 に答える