得知 app 被 rejected 後,今天花了一點時間修補問題,並且新增一個組態的程式來填補 UIX2 的問題,原本在本機測試時是沒有問題的,後來上傳到 Intel AppUp Developer Center 後,有請 IADP 顧問級人物 Bill Chung 幫忙下載測試 (做 beta tester)...
自得知 app 被 rejected 後,今天花了一點時間修補問題,並且新增一個組態的程式來填補 UIX2 的問題,原本在本機測試時是沒有問題的,後來上傳到 Intel AppUp Developer Center 後,有請 IADP 顧問級人物 Bill Chung 幫忙下載測試 (做 beta tester),但他回報應用程式有問題,我上去 AppUp Dashboard 的 Crash Report 中查詢,看到這樣的訊息:
不過我在本機上無法重現這個問題,我處理這一段的原始程式是:
XmlDocument doc = new XmlDocument();
doc.Load(Environment.CurrentDirectory + @"\" +
this.GetType().Assembly.GetName().Name + ".exe.config");
XmlNode nodeConfiguration =
doc.DocumentElement.SelectSingleNode(
string.Format("//configuration/oauth.configuration/providers/add[@provider='{0}']",
this._appOAuthConfigurationItemName));
if (nodeConfiguration == null)
{
MessageBox.Show(
"Can't found specified configuration section.", "Configuration Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
else
{
nodeConfiguration.Attributes.GetNamedItem("consumerKey").Value = this.txtConsumerKey.Text;
nodeConfiguration.Attributes.GetNamedItem("consumerSecret").Value = this.txtConsumerSecret.Text;
doc.Save(Environment.CurrentDirectory + @"\" +
this.GetType().Assembly.GetName().Name + ".exe.config");
ConfigurationManager.RefreshSection("oauth.configuration");
}
doc = null;
this.Close();
這段程式碼會存取 app.config 並修改資料,並且更新組態資料,但是 Environment.CurrentDirectory 會視應用程式的啟動點而改變,如果用應用程式安裝時產生的捷徑時沒有問題,但如果在 Intel AppUp(SM) Center 程式中啟動程式時,Environment.CurrentDirectory 反而會變成 Intel AppUp(SM) Center 的安裝目錄,以致於程式無法找到 app.config 而擲出例外。
問題根源找出來後,程式碼改為:
XmlDocument doc = new XmlDocument();
doc.Load(Path.GetDirectoryName(
new Uri(this.GetType().Assembly.CodeBase).LocalPath) + @"\" +
this.GetType().Assembly.GetName().Name + ".exe.config");
XmlNode nodeConfiguration =
doc.DocumentElement.SelectSingleNode(
string.Format("//configuration/oauth.configuration/providers/add[@provider='{0}']",
this._appOAuthConfigurationItemName));
if (nodeConfiguration == null)
{
MessageBox.Show(
"Can't found specified configuration section.", "Configuration Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
else
{
nodeConfiguration.Attributes.GetNamedItem("consumerKey").Value = this.txtConsumerKey.Text;
nodeConfiguration.Attributes.GetNamedItem("consumerSecret").Value = this.txtConsumerSecret.Text;
doc.Save(Path.GetDirectoryName(
new Uri(this.GetType().Assembly.CodeBase).LocalPath) + @"\" +
this.GetType().Assembly.GetName().Name + ".exe.config");
ConfigurationManager.RefreshSection("oauth.configuration");
}
doc = null;
this.Close();
經過顧問級人物 Bill Chung 再次測試後,搞定。
Reference:
IADP 顧問級人物 Bill Chung 的測試報告。