public static string ResolveMsiShortcut(string file) { StringBuilder product = new StringBuilder(NativeMethods.MaxGuidLength + 1); StringBuilder feature = new StringBuilder(NativeMethods.MaxFeatureLength + 1); StringBuilder component = new StringBuilder(NativeMethods.MaxGuidLength + 1); NativeMethods.MsiGetShortcutTarget(file, product, feature, component); int pathLength = NativeMethods.MaxPathLength; StringBuilder path = new StringBuilder(pathLength); NativeMethods.InstallState installState = NativeMethods.MsiGetComponentPath(product.ToString(), component.ToString(), path, ref pathLength); if (installState == NativeMethods.InstallState.Local) { return(path.ToString()); } else { return(null); } }
String GetMsiShortcut(String _rawPath) { var product = new StringBuilder(NativeMethods.MaxGuidLength + 1); var feature = new StringBuilder(NativeMethods.MaxFeatureLength + 1); var component = new StringBuilder(NativeMethods.MaxGuidLength + 1); NativeMethods.MsiGetShortcutTarget(_rawPath, product, feature, component); var pathLength = NativeMethods.MaxPathLength; var path = new StringBuilder(pathLength); NativeMethods.InstallState installState = NativeMethods.MsiGetComponentPath(product.ToString(), component.ToString(), path, ref pathLength); if (installState == NativeMethods.InstallState.Local) { return(path.ToString()); } else { return(null); } }